读书人

替一个指针分配了空间然后再赋值为N

发布时间: 2013-10-04 21:41:43 作者: rapoo

为一个指针分配了空间,然后再赋值为NULL,是不是等同于没有分配空间?
下面这个小程序做了如题的试验,请帮我释疑。

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

int main(void)
{
int *p;

p = (int *)malloc(sizeof(int));
p = NULL;

*p = 10;
printf("%d\n", *p);

return 0;
}


这样的结果是
Press any key to continue

如果注释掉p = NULL;,就能得到10的结果。

还有一疑问,如果注释掉p = NULL;,加上free(p),依然能得到10。我觉得应该不会有结果才是。为什么会这样?

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"

int main(void)
{
int *p;

p = (int *)malloc(sizeof(int));
//p = NULL;
free(p);

*p = 10;
printf("%d\n", *p);

return 0;
}

得到结果10。


[解决办法]
>为一个指针分配了空间,然后再赋值为NULL,是不是等同于没有分配空间?
等同于内存泄露。
>如果注释掉p = NULL;,加上free(p),依然能得到10。
说明那部分内存空间还没有被留作他用,里面暂时还是原来的值。未定义行为不保证正确但也不保证一定出错。

读书人网 >C语言

热点推荐