【发布时间】:2011-04-14 19:15:07
【问题描述】:
我有以下 C 代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
}node;
int main()
{
node * n;
printf("\n%d\n",n->a);
n = (node *) malloc ( sizeof( node ));
printf("\n%d\n",n->a);
n->a = 6;
printf("\n%d\n",n->a);
free(n);
printf("\n%d\n",n->a);
n->a = 4;
printf("\n%d\n",n->a);
return 0;
}
得到的输出是:
1314172
0
6
0
4
我的问题是即使在 free(n) 之后,为什么 n->a = 0 以及我们如何将其重新分配给任何值,例如 n->a = 4 ?
free 不会使 n 指向的内存块无效吗??
【问题讨论】:
-
如果您担心清除数据,您可以在 free() 之后在同一空间上执行 calloc...但是,我想这违背了 free 的目的 :)
-
为什么要使用这种未定义的行为来达到某种目的?
-
一个更好的做法是在free后将变量设置为NULL。这将确保未定义的行为将成为已定义的行为(崩溃)
标签: c pointers malloc heap-memory free