第1个回答 2008-07-11
分配空间是指从程序可用的堆空间里取出合适大小的空间,并将这个空间的地址付给指针p. 在显示的释放前,这片内存不会被分配给其他指针。
delete完成两个动作:1,清空ptr指向的内存(对于类对象指针,就是调用其析构函数)。2,告诉系统这快内存现在没有被引用,可以被分配给其他的申请者。
上面的程序中,delete p后, p指向内存的值被清空,也就是*p是一个未被初始化的整型变量。指针p的值并未被改改变,指针p仍然指向这片内存。因此,*p=2; 仍然可以执行。
可能的问题是,某次调用int *p2 = new int时,系统会把这片内存视为可分配的内存而分配给p2,那么 p2与p指向同一片内存, 而产生不可预计的程序逻辑。
第2个回答 2008-07-11
delete后
p = NULL;的操作是很必要的。
delete的p俗称野指针,指向了未知内容。
这段内存可能为其他数据所用。
一般来说,这段内存被其他操作改写的可能性并不大,因此会正确显示。但是是绝对的危险操作。
每年世界上都要花20亿美元解决野指针引起的bug,尤其对长期运行的程序,危害极大。
第3个回答 2008-07-11
delete之后的再new绝对是必须的
你写的程序很小,p的地址空间可能一直未被占用,但当一台电脑有大量程序运行时,不能确定操作系统会分配哪段内存,如果在你delete p之后,p的空间被占用,而你此时在向p进行赋值便会导致程序崩溃