小编Ste*_*mer的帖子

为什么free()不释放所有分配的内存位置?

我不知道我做错了什么,或者我的概念是否有些错误

#include<stdio.h>
#include<stdlib.h>

int main()
{
     int *p;
     p=calloc(3,sizeof(int));
     p[0]=10;
     p[1]=15;
     p[2]=30;
     printf("\n%d\n%p\n%d\n%p\n%d\n%p\n\n",p[0],p,p[1],p+1,p[2],p+2);
     free(p);
     //p=NULL;
     printf("\n%d\n%p\n%d\n%p\n%d\n%p\n\n",p[0],p,p[1],p+1,p[2],p+2);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

当第二个,printf()运行时,它显示p [2] = 30,而p [0] = p [1] = 0(在gcc ubuntu和Code :: Blocks窗口中的一些任意值).我有两个问题.

  1. 为什么free()释放前两个指针而不是第三个指针.一?
  2. 当显示任意值似乎正确时,为什么ubuntu中的值显示为0?

我是初学者所以请耐心等待.我用malloc()尝试了同样的事情,同样的事情发生了.

c malloc free calloc dynamic-memory-allocation

1
推荐指数
1
解决办法
315
查看次数

标签 统计

c ×1

calloc ×1

dynamic-memory-allocation ×1

free ×1

malloc ×1