一个指针的问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:29:11
但是 int *a=new int;
*a=10;
delete a;
if(a==0)//或者a==NULL
cout<<"无指向";
else
cout<<"有指向";
请问输出什么?
如果输出"无指向"(那就说明我的电脑出问题了,问题也就解决)。
但是输出有指向,那请告诉我如何更改。我的程序错误就出现就在这里,
我为这个问题忙了一下午了。脑袋都打了。请各位指点

int *a=new int;
*a=10;
delete a;
if(a==0)//或者a==NULL
在这里a不等于0也不等于NULL,a是指针名,就是一个地址,是不可能等于0或NULL的,只有指针指向的变量的内容才有可能是0或NULL,所以这个if在这里没有判断的意义.所以永远输出”有指向“。

cout<<"无指向";
else
cout<<"有指向";
如果你delete掉a,那么你在heap堆里开的一个int整型的内存空间就不能被访问了,于是就会出现内存泄露memory leak,而此时的指针a已被delete,其指向的地址未知,但显然不是原指向。所以a应该是有指向,只不过不知到指向哪里。

delete a;
以后, a的值不变, 但它指向的地址是无效的, 俗称野指针.
所以你判断a==0是不对的.
所以一般我们删除一个对象时, 要给对象指针赋值为0

delete a;
a=NULL;

...
if(a==NULL)
...

delete a只会回收new分配的空间, a本身不变.

int *a=new int;
*a=10;
delete a;
if(a==0)//或者a==NULL
cout<<"有指向";
else
cout<<"无指向";
得了
呵呵...你其实可以看下a指向那里啊
union {int *a;int b;}gg;
gg.a=(int *)malloc(sizeof(int));
*gg.a=10;
free(gg.a);
printf("%d",gg.b);