关于delete内存

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

}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值