看到有些书上说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;
}