首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-16 
对象被删除后,为什么还可以用?classABC{Test(){printf( \nTest )}intmain(){ABCtnewABC()deletett.T

对象被删除后,为什么还可以用?
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~~~~

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

热点排行