社区
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; 就能释放所有内存。
...全文
943
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;一次性释放
数组
内存
申请和
释放
,
指针数组
和数组指针
一 数组指针的空间
释放
1 2 3 4 int (*p)[3] = new int [4][3]; // ... delete []p; //---1 delete[](*p); //---2 在
释放
这个二维数组时,应该使用1和2哪种方式呢?哪种对呢?
结构体
指针数组
内存
分配
释放
#include #include #include #include #include using namespace std;typedef class student{public:intnumber;char*name;}STU, *LPSTU;vectorvec;vector::iterator iter;mapmapstu;map::iterator itermap;void main(void){char* str1 = "YaoMing";char* str2 = "T_MAC";ch
用指针正确的操纵动态数组与正确用delete
释放
内存
的方法
#include #include using namespace std; void f(int *i_ptr,size_t n) { assert(n>0); for(int i=0;in;++i) *(i_ptr++)=i; } int main() { size_t array_siz
指针数组
的
内存
分配和
释放
编码情景是要动态分配个数不确定的非内嵌类型对象,把获取的对象指针都存在一个数组里面,留待其他地方使用. 定义指针 CBase** m_pMotion; 个人偏向于用new/delete关键字,当然也可以用malloc/free函数组合来进行
内存
的分配和
释放
分配
内存
, nHWNo是外部传递的参数 m_pMotion = new CBase*[nHWNo]; for (int n...
结构体套一级指针、二级指针、数组
内存
分配和
释放
问题
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> /* "name1111" "name2222" "name3333" */ typedef struct Teacher { //char student[10][30] char name[64]; char *alisname; char * *stuname; in
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章