编程论坛's Archiver

newyj 发表于 2008-5-8 21:54

关于delete后的问题?

删除 动态指针后 会变成 悬垂指针  应将指针置为零
怎么实现
能否给出代码

aipb2007 发表于 2008-5-9 00:21

悬垂指针是这个意思,但是并非单一的delete后出现的。

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

这里才是悬垂指针的危险性,这样的错误再大型系统里很难很难debug,也很难避免,置0什么的也没用,只有经验再经验,细心再细心

newyj 发表于 2008-5-9 11:56

谢谢了
那置零 是编译器自己操作 还是 得手工操作

zzy840208 发表于 2008-5-9 12:12

手工操作

如:int *p=new int(8);
    ...
   delete p;
   p=o0;

newyj 发表于 2008-5-9 12:55

删除P   P这个变量删除不
那置零后 P还能不能再被赋值

sunkaidong 发表于 2008-5-9 22:12

可以..你自己写个了例子看看啊

Aegisys 发表于 2008-5-10 21:24

#define    SAFE_DELETE(f)    \
    delete f;    \
    f = NULL;

zhfsxtx 发表于 2008-5-11 04:12

我是菜鸟

请问P被  DELETE 之后其作用域不就结束了吗?
为什么还可以出现对其制0(P=0)这样的语句?就象
///*{
   int a;
   ......
   }
a=5; *////
有效吗?

Aegisys 发表于 2008-5-11 10:49

作用域不会结束..

指针变量和DWORD变量没有任何区别,只不过它的内容是地址而已.
delete p; 释放的是p指向的内存,而不是p这个变量

Aegisys 发表于 2008-5-11 10:50

多看看<高质量C++/C程序设计>(作者林锐),关于指针方面就会明白不少

jamesl 发表于 2008-5-12 10:21

Delete vs. Delete [] in C and C++

http://www.digcode.com/default.aspx?page=ed51cde3-d979-4daf-afae-fa6192562ea9&article=17ec9949-09c0-4093-9c71-aaebb8dbc4ca

zhfsxtx 发表于 2008-5-12 14:33

有点明白了。谢谢

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.