清除指针的问题

donysk 2005-04-01 09:19:04
一段代码
char * str = "Current connection disconnect!";
...
delete str; //here
str = NULL; //here
请问:这里清理指针的方法对吗?
delete str和str = NULL有什么区别?
...全文
190 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
donysk 2005-04-01
  • 打赏
  • 举报
回复
非常感谢!
xjp6688 2005-04-01
  • 打赏
  • 举报
回复
为了安全,防止防止以后错误地引用
建议看高质量C++编程
mymyal123 2005-04-01
  • 打赏
  • 举报
回复
学习
pcboyxhy 2005-04-01
  • 打赏
  • 举报
回复
http://blog.csdn.net/crescendo/archive/2004/11/03/165886.aspx

C++98规定了
可以被 delete 操作符使用的指针只能是 来自 new的
可以被 delete[] 操作符使用的指针只能是 来自 new[]的。
简单的说就是一一配对。
程序中有几个new就有几个delete
有几个new [] 就有几个 delete[]


lemon520 2005-04-01
  • 打赏
  • 举报
回复
对,只有new出来的才需要delete
hxblvc 2005-04-01
  • 打赏
  • 举报
回复
char * str = "Current connection disconnect!";

这个str又不是new出来的,为什么要delete!!!

这个str不用显示的去删除.
xy_star 2005-04-01
  • 打赏
  • 举报
回复
楼上说得很清楚了
如果只是这样
char * str = "Current connection disconnect!";
...
delete str;
那以后用到str的时候,str指向的东西可能是一堆乱码。比如strcpy(str1,str),str1就不能被赋值“Current connection disconnect”
如果只是这样
char * str = "Current connection disconnect!";
...
str = null;
那以后就不能再用str这个指针。但由char * str = "Current connection disconnect!";这个语句分配在堆上的内存空间还在那里,只是以后再也找不到它了。
Salam2001 2005-04-01
  • 打赏
  • 举报
回复
嗯 还有就是,配对原则了:
new 配对 delete;
new [] 配对 delete[];

Salam2001 2005-04-01
  • 打赏
  • 举报
回复
显然不对,delete 是用在通过 new 分配的堆上的内存的,而 str 如果中途没有在另行分配heap内存的话,是指向静态存储区的指针,常量字符串本身是存储在静态存储区的。

假设,str 指向heap内存块,那么 delete str; 会释放那块内存,还给系统。
str = NULL; or str = 0; 是为了安全起见,把str指向安全的内存地址---空,以便防止以后错误地引用。

一般的顺序是:
delete str;
str = 0;

如果,颠倒了,那么你就犯了内存泄露的错误了。
junguo 2005-04-01
  • 打赏
  • 举报
回复
应该为delete []str;
delete代表的意义是把str所指向的内存(即存放"Current..."字符串的内存)清除掉,使它可用。
而str = Null是指使str指向一个特定的内存地址0;而不并没有释放它所指的内存空间。
清除指针用delete就好了。
pcboyxhy 2005-04-01
  • 打赏
  • 举报
回复
delete str; //这里必须是delete []str;
delete str和str = NULL有什么区别?
前者是释放str指向的空间的内存,并不影响str的值。
后者是将str标记为null,防止以后使用已经释放了的空间

65,210

社区成员

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

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