首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

替一个指针分配了空间,然后再赋值为NULL,是不是等同于没有分配空间

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

为一个指针分配了空间,然后再赋值为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。
说明那部分内存空间还没有被留作他用,里面暂时还是原来的值。未定义行为不保证正确但也不保证一定出错。

热点排行