c++ delete 问题

xiwang1998 2011-06-10 09:29:57
我定义一个指针 CARINFO* info = NULL(CARINFO自己定义的结构体),然后通过getCarInfo(&info , carid)函数给info赋值。然后对指针info进行操作。请问对指针info操作完以后是否要delete。不delete的话,是否造成内存泄露?
...全文
126 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
魂之木 2011-06-10
  • 打赏
  • 举报
回复
你的getCarInfo(&info , carid)函数可以给info赋值,则这个指针肯定是指向了一个在堆上的对象(暂不考虑static类型对象),因为栈上对象受作用域限制不能在函数中返回,当然也可能赋值失败,回来时info仍然为NULL,在外面最好加上一句if(info != 0) delete info;
如果是在函数里以一个静态对象为指针赋值了,估计delete会产生一个错误吧
qingkongxiaoyang 2011-06-10
  • 打赏
  • 举报
回复
new 和delete是配套使用的。
如果没有new的过程,不需要显示地做delete释放内存操作。
如:
string str("test");
string *ss = &str;
printf("%s\n", ss->c_str());

不会造成内存泄漏,程序会自动去释放栈空间的。
jiangchaomr 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

没有通过 new分配空间,就不用delete
[/Quote]
此人说的对 系统应该会回收吧
ouyh12345 2011-06-10
  • 打赏
  • 举报
回复
vector在销毁或erase时,再delete
xiwang1998 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 myliveislost 的回复:]
引用 3 楼 xiwang1998 的回复:
引用 1 楼 bdmh 的回复:
没有通过 new分配空间,就不用delete

那我这个指针有指向了啊。不delete不会造成内存泄露吗?


你应该只是指向那个内存区....没有分配内存空间,所以不用 delete ,
[/Quote]
对,是指向这个内存块。但不delete的话。info这个指针是否成为野指针或造成内存泄露啊?
xiwang1998 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ouyh12345 的回复:]
引用 1 楼 bdmh 的回复:

没有通过 new分配空间,就不用delete


得看getCarInfo的实现,遵循谁申请谁释放的原则
[/Quote]
我定义了一个CARINFO结构体的vector。getCarInfo里主要功能是在这个vector中根据carid查询相关信息。找不到则向vector中插入数据。并把新插入的数据放到info中供getCarInfo函数外面进行操作。外面定义的CARINFO* info = NULL指针是否要delete。如果delete的话,是不是也将vector内的数据也清除掉了?如果不delete的话,INFO* info指针不就造成内存泄露了吗?
d283381038 2011-06-10
  • 打赏
  • 举报
回复
要是没有用NEW分配内存,则不要用DELETE
MyLiveIsLost 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiwang1998 的回复:]
引用 1 楼 bdmh 的回复:
没有通过 new分配空间,就不用delete

那我这个指针有指向了啊。不delete不会造成内存泄露吗?
[/Quote]

你应该只是指向那个内存区....没有分配内存空间,所以不用 delete ,
shaotine_wu 2011-06-10
  • 打赏
  • 举报
回复
有申请就要有释放,有借有还嘛
ouyh12345 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

没有通过 new分配空间,就不用delete
[/Quote]

得看getCarInfo的实现,遵循谁申请谁释放的原则
xiwang1998 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
没有通过 new分配空间,就不用delete
[/Quote]
那我这个指针有指向了啊。不delete不会造成内存泄露吗?
luciferisnotsatan 2011-06-10
  • 打赏
  • 举报
回复
如果getCarInfo里分配了空间,那就要delete。
bdmh 2011-06-10
  • 打赏
  • 举报
回复
没有通过 new分配空间,就不用delete
lizhi200404520 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xiwang1998 的回复:]
引用 13 楼 qqianqq 的回复:
C/C++ code

class A;
A* ptr1=new A;
A* ptr2;
ptr2 = ptr1;
你只要对ptr1进行delete就好了!
但是你对ptr2进行delete也行,但是你就不能对ptr1再进行delete;
一定要切记 new 和delete要配套使用。遵循谁new 谁delete。少delete内存泄露,……
[/Quote]

再者,ptr1和ptr2都是局部变量,即便它们不在了,堆内存不释放依然存在,这就造成内存泄露
lizhi200404520 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xiwang1998 的回复:]
引用 13 楼 qqianqq 的回复:
C/C++ code

class A;
A* ptr1=new A;
A* ptr2;
ptr2 = ptr1;
你只要对ptr1进行delete就好了!
但是你对ptr2进行delete也行,但是你就不能对ptr1再进行delete;
一定要切记 new 和delete要配套使用。遵循谁new 谁delete。少delete内存泄露,……
[/Quote]

ptr1,ptr2都指向一个堆内存,delete任何一个,都是对堆内存的释放,不知楼主还有什么不懂得 。大伙都跟你解释清楚了
xiwang1998 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qqianqq 的回复:]
C/C++ code

class A;
A* ptr1=new A;
A* ptr2;
ptr2 = ptr1;
你只要对ptr1进行delete就好了!
但是你对ptr2进行delete也行,但是你就不能对ptr1再进行delete;
一定要切记 new 和delete要配套使用。遵循谁new 谁delete。少delete内存泄露,多delete未定义。
[/Quote]
那如果我不delete ptr1,那ptr2将一直存在?
QQIANQQ 2011-06-10
  • 打赏
  • 举报
回复

class A;
A* ptr1=new A;
A* ptr2;
ptr2 = ptr1;
你只要对ptr1进行delete就好了!
但是你对ptr2进行delete也行,但是你就不能对ptr1再进行delete;
一定要切记 new 和delete要配套使用。遵循谁new 谁delete。少delete内存泄露,多delete未定义。

64,680

社区成员

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

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