注册 登录
编程论坛 C++教室

关于delete后的问题?

newyj 发布于 2008-05-08 21:54, 1440 次点击
删除 动态指针后 会变成 悬垂指针  应将指针置为零
怎么实现
能否给出代码
11 回复
#2
aipb20072008-05-09 00:21
悬垂指针是这个意思,但是并非单一的delete后出现的。

举个例子
int *p = new int(1);
假设这里插入N多代码
int *p2 = p;
假设再插入N多代码
delete p;   //这里释放了,也知道p不能使用了,是个悬垂的,最好置0
假设又插入N多代码
f(p2);    //以为p2还可以用,没释放过嘛,结果运行到某个时候崩溃

这里才是悬垂指针的危险性,这样的错误再大型系统里很难很难debug,也很难避免,置0什么的也没用,只有经验再经验,细心再细心
#3
newyj2008-05-09 11:56
谢谢了
那置零 是编译器自己操作 还是 得手工操作
#4
zzy8402082008-05-09 12:12
手工操作
如:int *p=new int(8);
    ...
   delete p;
   p=o0;
#5
newyj2008-05-09 12:55
删除P   P这个变量删除不
那置零后 P还能不能再被赋值
#6
sunkaidong2008-05-09 22:12
可以..你自己写个了例子看看啊
#7
Aegisys2008-05-10 21:24
#define    SAFE_DELETE(f)    \
    delete f;    \
    f = NULL;
#8
zhfsxtx2008-05-11 04:12
我是菜鸟
请问P被  DELETE 之后其作用域不就结束了吗?
为什么还可以出现对其制0(P=0)这样的语句?就象
///*{
   int a;
   ......
   }
a=5; *////
有效吗?
#9
Aegisys2008-05-11 10:49
作用域不会结束..

指针变量和DWORD变量没有任何区别,只不过它的内容是地址而已.
delete p; 释放的是p指向的内存,而不是p这个变量
#10
Aegisys2008-05-11 10:50
多看看<高质量C++/C程序设计>(作者林锐),关于指针方面就会明白不少
#11
jamesl2008-05-12 10:21
Delete vs. Delete [] in C and C++

http://www.
#12
zhfsxtx2008-05-12 14:33
有点明白了。谢谢
1