社区
C++ 语言
帖子详情
指针数组如何释放内存
冉航--小虾米
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; 就能释放所有内存。
...全文
939
17
打赏
收藏
指针数组如何释放内存
我定义了一个指针数组, 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; 就能释放所有内存。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;一次性释放
数组
内存
申请和
释放
,
指针数组
和数组指针
本文探讨了C/C++中动态二维数组的两种形式——
指针数组
和数组指针,以及它们在
内存
管理上的差异。在
释放
内存
时,两种方式均未检测出
内存
泄露,表明都是正确的。C++中,
释放
指针数组
需要`delete [] p`,而C语言的`free(p)`则适用于各种类型。同时,文章还简要对比了new/delete与malloc/free的区别。
结构体
指针数组
内存
分配
释放
本文介绍了C++中结构体
指针数组
的
内存
分配和
释放
,包括使用new操作符动态分配
内存
,将指针存储到vector和map中,以及如何正确地
释放
内存
以避免
内存
泄漏。示例代码展示了动态分配结构体
指针数组
、向容器中添加元素以及删除元素的过程。
用指针正确的操纵动态数组与正确用delete
释放
内存
的方法
本文深入探讨了C++中使用指针操纵动态数组时的常见问题,特别是如何正确处理
内存
释放
,避免
内存
泄漏导致的程序崩溃。通过实例分析,展示了不当的操作可能导致的
内存
访问错误,并提供了安全
释放
内存
的正确方法。
指针数组
的
内存
分配和
释放
本文详细介绍了如何在C++中动态分配和
释放
非内嵌类型对象数组,使用new/delete及new[]/delete[]操作符,并对比了std::vector的使用方式,强调了
内存
管理的重要性。
结构体套一级指针、二级指针、数组
内存
分配和
释放
问题
博客聚焦于结构体一级指针、二级指针及数组的
内存
分配和
释放
问题,在信息技术领域,合理的
内存
管理至关重要,涉及到程序的性能和稳定性,解决这些问题能提升代码质量。
C++ 语言
65,210
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章