指针数组如何释放内存

冉航--小虾米 2010-03-22 06:15:47
我定义了一个指针数组,

char **p = new char* [3];

for(i =0; i < 3; i++)
{
p[i] = new char[10];
}

我是这样释放的:

for(i =0; i < 3; i++)
{
if(p[i] != NULL)
{
delete p[i];
p[i] = NULL;
}

}
delete pp;
pp = NULL;

不知道对不? 我想问一下可不可以 一次性 delete pp; 就能释放所有内存。
...全文
909 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunsand 2010-03-23
  • 打赏
  • 举报
回复
循环释放
ssdx 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gaoxiaoweiandy 的回复:]
补充:没有 运行delete [] pStr. 只有delete A; 那么 PStr所指向的内存会释放吗????
[/Quote]

自己写的类,不会。

char/int 这种内置类型无所谓。

不过还是建议对于数组都写成 delete[] 这种情况
linyongzuo 2010-03-23
  • 打赏
  • 举报
回复
依然存在与内存之中,只不过你找不到。一般你在析构函数里面delete掉就好了。
linyongzuo 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gaoxiaoweiandy 的回复:]
补充:没有 运行delete [] pStr. 只有delete A; 那么 PStr所指向的内存会释放吗????
[/Quote]
不会。
冉航--小虾米 2010-03-23
  • 打赏
  • 举报
回复
补充:没有 运行delete [] pStr. 只有delete A; 那么 PStr所指向的内存会释放吗????
yuzl32 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 gaoxiaoweiandy 的回复:]
如果 有 一个 对象 A 是 通过指针 new 出来的。

例如 A * P = new A();

p-> pStr = new char[10];

请问 运行 delete A 以后, 那 pStr的内存会释放掉吗?
[/Quote]
不会,要先释放delete[] pStr.
冉航--小虾米 2010-03-23
  • 打赏
  • 举报
回复
如果 有 一个 对象 A 是 通过指针 new 出来的。

例如 A * P = new A();

p-> pStr = new char[10];

请问 运行 delete A 以后, 那 pStr的内存会释放掉吗?
lxslove 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gaoxiaoweiandy 的回复:]
delete [] a[i]

和 delete a[i]


有什么区别,我用的 是 delete a[i] 形式 也没报错
[/Quote]

delete a[i]代替delete [] a[i] 这个是标准未定义的行为,结果不可预料,不过对于普通数据类型,大部分编译器都会成功delete掉,但如果是类,有析构函数的话,只有第一个对象的析构函数得到执行。最好
不要这样做!
chenhu_doc 2010-03-22
  • 打赏
  • 举报
回复
对,就是这样的。
而且做到一一对应。

另外:
char *ch = new char;
delete ch;
ch = 0;
delete ch; // 这是可以的,不会报错。

delete一个0指针,是不会做内存释放的,而是简单地返回。
最帅马老师 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gaoxiaoweiandy 的回复:]
举个例子吗?

char * ch = new char;

delete ch;


char * ch = new char[10];

delete [] ch;


是这个意思吗?
[/Quote]

对的
冉航--小虾米 2010-03-22
  • 打赏
  • 举报
回复

举个例子吗?

char * ch = new char;

delete ch;


char * ch = new char[10];

delete [] ch;


是这个意思吗?
chenhu_doc 2010-03-22
  • 打赏
  • 举报
回复
new/delete
new xx[] / delete [] xx

需要配对使用。
冉航--小虾米 2010-03-22
  • 打赏
  • 举报
回复
delete [] a[i]

和 delete a[i]


有什么区别,我用的 是 delete a[i] 形式 也没报错
heguo2chao3 2010-03-22
  • 打赏
  • 举报
回复
delete p[i]后就不要再 p[i]=NULL了

不可以一次delete pp
weixiaoshashou 2010-03-22
  • 打赏
  • 举报
回复
for(int i=0;i<n;i++)
delete []a[i];
for(int j=0;j<n;j++)
delete []a;
就这样。
昵称很不好取 2010-03-22
  • 打赏
  • 举报
回复
delete []p[i];
delete []pp;
pengzhixi 2010-03-22
  • 打赏
  • 举报
回复
你这样释放是对的,不可能通过delete pp;一次性释放

64,654

社区成员

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

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