首页
社区
课程
招聘
[求助] delete后指针是不为空的??
发表于: 2009-8-2 15:31 8708

[求助] delete后指针是不为空的??

2009-8-2 15:31
8708
以前一直以为一个指针经常 delete 后,会变成空指针,

今天实验了一下,发现 new 后再 delete , 指针地址依然存在

原先以为这个指针会给我清 0,

那么有没有办法 知道这下面的 指针(buf)有没有 delete ?


void testbuf()
{
	CString temp;
	char *buf=NULL;
	if (!buf)
	{
		buf=new char[1024];
		if (buf)
		{
			temp.Format("申请地址成功: %08X",buf);
			MessageBox(NULL,temp,NULL,MB_OK);
			
			delete buf;			
			
			temp.Format("dele后地址为: %08X",buf);		//buf 的地址不是 NULL
			MessageBox(NULL,temp,NULL,MB_OK);
		}
	}
}
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 184
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
if (buf!=NULL)
{
delete []buf;
buf=NULL;
}
2009-8-2 15:57
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
delete后 buf指向的位置没有意思  buf存在但是为野指针  最好清空
2009-8-2 16:16
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=pathletboy;665018]if (buf!=NULL)
{
delete []buf;
buf=NULL;
}[/QUOTE]

原来要手动清空啊,我一直以为是系统自己帮我置为 NULL
2009-8-2 16:35
0
雪    币: 171
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
系统只负责释放空间吧
2009-8-2 16:43
0
雪    币: 1753
活跃值: (865)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
内存被释放不表示,指针消亡 或者成为NULL指针~
2009-8-3 21:09
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
可以学习一下RAII的概念,以及学习使用std::auto_ptr。
2009-8-5 00:30
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
8
其实delete操作符不清空指针的原因非常简单,因为参数是“按值传递”的。
2009-8-5 00:34
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
delete buf  是释放 buf 指向的内存 ,最好写成 delete []buf  , buf 是局部变量, 过了函数自动回收,如果是成员变量就要 buf = NULL,  防止野指针.
2009-8-8 13:56
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
2009-8-8 20:37
0
游客
登录 | 注册 方可回帖
返回
//