指针指向结构的问题

时间:2019-07-01 19:27:53

标签: c

内存尚未释放 请为这个问题提供一些帮助

#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]

1 个答案:

答案 0 :(得分:2)

reference

有两点

  
      
  1. 先前由对malloc,calloc或realloc的调用分配的内存块被释放,使其再次可用于进一步的分配。
  2.   
  3. 请注意,此函数不会更改ptr本身的值,因此它仍指向相同(现在无效)的位置。
  4.   

因此,您刚刚释放的内存不会立即被释放,而是被标记为可重新分配,并且您的ptr指向那些无效的位置。因此,在释放null之后立即取消引用ptr到ptr是个好主意。

在确保还不会多次释放同一内存之后,通过将ptr取消引用到null