请教:关于delete

tomatobin 2011-02-22 07:58:11
[code=C]/C++
int total=3;
char *char_array[total];
cout<<"Please input "<<total<<" string for the char_array.\n";
for(int i=0;i<total;i++)
{
while(cin.get()!='\n') continue;
cout<<"char_array["<<i+1<<"]:";
char_array[i]=new char[30];//申请内存空间
cin.get(char_array[i],30);
}[/code]

怎样delete申请有空间呢?
for(int i=0;i<total;i++)
delete char_array[i];
这样对不对?
...全文
188 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
C271579305 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ugly927846 的回复:]

基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。


1. 当你使用new时,有两件事会发生。第一,内存被配置(透过函数operator new)。第二,会有一个(或以上……
[/Quote]

学习
pathuang68 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ugly927846 的回复:]

基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。


1. 当你使用new时,有两件事会发生。第一,内存被配置(透过函数operator new)。第二,会有一个(或以上……
[/Quote]
说得好!
tomatobin 2011-02-23
  • 打赏
  • 举报
回复
[code=C]/C++为什么这个又不行[/code]
tomatobin 2011-02-23
  • 打赏
  • 举报
回复
怎么回事
tomatobin 2011-02-23
  • 打赏
  • 举报
回复
[code=C]/C++怎么插入不了代码了,我晕呐
[/code]
pengzhixi 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 tomatobin 的回复:]
引用 10 楼 pengzhixi 的回复:
delete []char_array[i];

这样似乎更有道理,
为什么编译器对几个版本不发出警告呢
[/Quote]
把警告等级调高点试试
tomatobin 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pengzhixi 的回复:]
delete []char_array[i];
[/Quote]
这样似乎更有道理,
为什么编译器对几个版本不发出警告呢
jackiesen 2011-02-23
  • 打赏
  • 举报
回复
delete []char_array[]就可以了!
shaotine_wu 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pengzhixi 的回复:]

delete []char_array[i];
[/Quote]
+1
fulima007 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ugly927846 的回复:]
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。


1. 当你使用new时,有两件事会发生。第一,内存被配置(透过函数operator new)。第二,会有一个(或以上)的constructors……
[/Quote]
哈哈,大牛,学习了
wulg10 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ewook 的回复:]

引用 2 楼 maoxing63570 的回复:
int total=3;
char *char_array[total];
这样的代码貌似连编译都通不过哦

嗯,应该是const int total=3;吧?你写的delete语句应该是可以的。
[/Quote]
pengzhixi 2011-02-23
  • 打赏
  • 举报
回复
delete []char_array[i];
碎碎念 2011-02-23
  • 打赏
  • 举报
回复
首先。。。

int total=3;
char *char_array[total];

这两句改成
const int total=3;
char *char_array[total];

然后....
delete 之后最好再char_array[i]=NULL;
a403635976 2011-02-23
  • 打赏
  • 举报
回复
应该直接写成:
delete[] char_array;
欣客 2011-02-22
  • 打赏
  • 举报
回复
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。


1. 当你使用new时,有两件事会发生。第一,内存被配置(透过函数operator new)。第二,会有一个(或以上)的constructors针对此内存被调用。当你使用delete时,也有两件事发生:一个(或以上)的destructors会针对此内存被调用,然后内存被释放(透过函数operator delete)。

2. 如果你使用delete是未加括号,delete便假设删除对象是单一对象。否则便假设删除对象是个数组。

3. string *stringPtr1 = new string;

string *stringPtr2 = new string[100];

……

delete stringPtr1;

delete [] stringPtr2;

如果你对着stringPtr1使用“[]”形式,其结果未定义。如果你对着stringPtr2没有使用“[]”形式,其结果亦未定义。犹有进者,这对内建型别如int者亦未定义,即使这类型别并没有destructors。

4. 因此,游戏规则很简单,如果你在调用new时使用了[],则你在调用delete时也使用[],如果你在调用new的时候没有[],那么你也不应该在调用时使用[]。


Johnxme126 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ewook 的回复:]
引用 2 楼 maoxing63570 的回复:
int total=3;
char *char_array[total];
这样的代码貌似连编译都通不过哦

嗯,应该是const int total=3;吧?你写的delete语句应该是可以的。
[/Quote]
+1
direction917 2011-02-22
  • 打赏
  • 举报
回复
delete[] 用于删除数组。
smallhappiness 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ewook 的回复:]
引用 2 楼 maoxing63570 的回复:
int total=3;
char *char_array[total];
这样的代码貌似连编译都通不过哦

嗯,应该是const int total=3;吧?你写的delete语句应该是可以的。
[/Quote]
循环下,就相当于3个 p,删除3个p,char* p;然后delete p。
ClassDan 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 maoxing63570 的回复:]
int total=3;
char *char_array[total];
这样的代码貌似连编译都通不过哦
[/Quote]
嗯,应该是const int total=3;吧?你写的delete语句应该是可以的。
maoxing63570 2011-02-22
  • 打赏
  • 举报
回复
int total=3;
char *char_array[total];
这样的代码貌似连编译都通不过哦
加载更多回复(1)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧