在下面的代码段中,之后free(x)
, 为什么y
变成0?
根据我的理解,所指向的堆中的内存x
,并且仍然被指出y
,还没有分配给别人,怎么会变成0呢?
而且,我不认为这是free(x)
这将其更改为 0。
任何意见?
#include <stdio.h>
int main(int argc, char *argv[])
{
int *y = NULL;
int *x = NULL;
x = malloc(4);
*x = 5;
y = x;
printf("[%d]\n", *y); //prints 5
free(x);
printf("[%d]\n", *y); //why doesn't print 5?, prints 0 instead
return 0;
}
这是未定义的行为,解释只是猜测。
我可以推测您可能正在运行 C 库的调试版本,并且 free() 的调试版本会将指向的区域归零。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)