关于delete内存

来源:互联网 发布:电影网源码php 编辑:程序博客网 时间:2024/05/18 01:02
看到有些书上说delete一个指针的内存后要把指针赋值为NULL,不明白为什么,自己拿个小例子演示了一下明白了,原来如此:
int main(){char *str =new char[5];strcpy(str,"odfd");cout<<"string of the pointer: "<<str<<'\n'<<" address of the pointer: "<<&str<<'\n';delete[] str;cout<<"string of the pointer: "<<str<<'\n'<<" address of the pointer: "<<&str<<'\n';std::cin.get();return 0;}

运行的结果如下:


从输出结果可以看出,虽然我delete 了str这个指针,但是这个指针的指向值并非为空,delete[ ]仅仅表示str所指向的地址为不可用,这时候的指针就变成了野指针,当判断if(str==NULL){// code },则会出错,因此在delete 之后,应再为之赋予空值。

程序修改如下:

int main(){char *str =new char[5];strcpy(str,"odfd");cout<<"string of the pointer: "<<str<<'\n'<<" address of the pointer: "<<&str<<'\n';delete[] str; str=NULL;  //preparation for error std::cin.get();return 0;}


原创粉丝点击