读书人

对象被删除后为什么还可以用?该如何

发布时间: 2012-02-16 21:30:36 作者: rapoo

对象被删除后,为什么还可以用?
class ABC
{ Test(){printf( "\nTest ");}

int main()
{
ABC t = new ABC();
delete t;

t.Test();
return 0;

}

//运行结果:Test
//何解???



[解决办法]
delete释放了内存后,没有将指针设置为NULL.导致产生“野指针”.
[解决办法]
delete 把对象删除后, 我们的程序把当初对该对象的内存快交换给系统,系统怎么样去处理,我们暂且不管。
在系统没有把你给他的内存真正释放的时候,你这时候的确可以访问该内存快,并做1写操作。只是系统回收的没有那么及时而已。 你在unix 或者 linux下 可能你会发现,程序的可访问性并不一致,这个跟系统对内存的管理有关系。

比如,我是系统,你是程序, 我给了你1个苹果,你拿来欣赏,你欣赏完毕之后给我,我这时就有权处理苹果,再我没及时处理之前,你又1次欣赏,越界!!! 如果我吃了 ,你肯定欣赏不到了。 明白了吗
[解决办法]
这就是野指针, 而且刚好你释放的那块地方没有被别人用
一切都是刚好, 所以才正确

如果那块地方被其他变量或程序使用了
那么就会出现 segment fault~~~~

[解决办法]
访问的是内存垃圾,如果被系统回收就会出错
[解决办法]
野指针

读书人网 >C++

热点推荐