关于数组动态内存,deleter 的问题!

xiaofengzzz 2008-03-27 11:11:16
请大家先看,这个是C++ Primer中的练习:
编写程序读入一组string类型的数据,并将它们存储在vector中。接着,把该vector对象复制给一个字符指针数组。为vector中的每个元素创建一个新的字符数组,并把该vector 元素的数据复制到相应的字符数组中,最后把指向该数组的指针插入字符指针数组。

在最后删除 char **ch = new char *[str.size()];
char *temp = 0 ....temp = new char[ (*iter).size() +1 ];

的时候我用的是数组删除方法,
delete [] temp;
delete [] ch;

请问这样删除完全吗?正确吗?
还是应该用:For语句来一个一个的删除?
是不是动态数组的删除和一般数组删除的不一样?
其中一个是指针的指针,是不是这个应该进入到内里再删除一次?

如果有时间的话希望回答的朋友可以讲的详细些,有相关的网页讲这些也行,不过我是刚学的,太深的东西看不懂〜〜

先谢谢各位了!


#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
vector < string > vect;
string str;

cout << "输入字符串, 以Control + D结束:\t";
while ( cin >> str )
vect.push_back( str );

char **ch = new char *[str.size()];
char *temp = 0;
size_t ix = 0;

for(vector<string>::iterator iter = vect.begin(); iter != vect.end(); ++iter, ++ix )
{
temp = new char[ (*iter).size() +1 ];
strcpy( temp, ( *iter).c_str() );
ch[ix] = temp;
}

cout << "输出最终char **ch的结果:\t";
for( ix = 0; ix != str.size(); ++ix )
cout << ch[ix] << endl;

delete [] temp;
delete [] ch;


return 0;
}
...全文
64 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn5211 2008-03-27
  • 打赏
  • 举报
回复
同意二楼。

有个原则,就是有多少new就有多少delete,你在for里用了那么多new,当然要再用循环delete。
xiaofengzzz 2008-03-27
  • 打赏
  • 举报
回复
发错地方了〜〜应该进新手乐园的,
管理员可以帮移下吗?
xbt746 2008-03-27
  • 打赏
  • 举报
回复
不完全,要有循环删除里面数组的内存
for(int i=0;i<str.size();i++)
{
delete []ch[i];
}
再delete[] ch;
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-27 11:11
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下