内存尚未释放 请为这个问题提供一些帮助
#include <stdio.h>
#include <stdlib.h>
typedef struct paramint
{
short val;
char name[150 + 1];
}tParamint;
int main(int argc, char *argv[]) {
tParamint *e;
e=(tParamint*)malloc(2*sizeof(tParamint));
e[1].val=12;
e[2].val=13;
printf("e[1].val=[%d]\n", e[1].val);
printf("e[2].val=[%d]\n", e[2].val);
free(e);
printf("e[1].val=[%d]\n", e[1].val);
printf("e[2].val=[%d]\n", e[2].val);
return 0;
}
初始值: e [1] .val = [12] e [2] .val = [13]
免费后 e [1] .val = [12] e [2] .val = [13]
答案 0 :(得分:2)
有两点
- 先前由对malloc,calloc或realloc的调用分配的内存块被释放,使其再次可用于进一步的分配。
- 请注意,此函数不会更改ptr本身的值,因此它仍指向相同(现在无效)的位置。
因此,您刚刚释放的内存不会立即被释放,而是被标记为可重新分配,并且您的ptr
指向那些无效的位置。因此,在释放null
之后立即取消引用ptr到ptr
是个好主意。
在确保还不会多次释放同一内存之后,通过将ptr
取消引用到null
。