delete p指针

来源:互联网 发布:java 并发 面试 编辑:程序博客网 时间:2024/04/30 12:06

删除p指向的内存。 
p成为“野指针”;

一般删除后应将p赋值为null。

 

----------------------------------------------

删除指向的资料,调用析构函数 

但也有可能指向的内存内容并未改写 
但这段内存已经无效,系统会回收的 

而且p也成为野指针,指向的位置并未改变 
但指向的位置内容可能已经不正确 

所以一般来说立刻要   p   =   NULL;

-----------------------------------------------------

都是delete这个词给大家造成的误解,其祖宗free()可能看上去更好一点. 

delete是什么也不删!!!!!! 

delete只是通知OS,有一块堆上的内存它已经不要了,枪毙还是关押,一切由OS做主. 


int   *p=new   int[100]; 
此时p是有地址的,设为0x00400001,其值设为0x10003000,其含义是在堆上从地址0x10003000开始起的400字节已从OS手中要过来p[0]=1234; 

delete   p; 
通知OS,从0x10003000处起的400字节,我已不在乎它的死活,您看着办吧. 

printf( "%p ",p); 
此时仍可打印出0x10003000,因为变量p是你自己的局部变量. 

printf( "%d ",p[0]); 
我还想看最后一眼,这时OS多半还没有枪毙它,估计你还看上一眼1234,但已不能保证,也许OS在你通知后立即押赴刑场了. 

.... 
过了数天 
printf( "%d ",p[0]); 
你想什么呢?那小子早已魂归西天多时了

原创粉丝点击