gpt4 book ai didi

c - 结构体指针的问题

转载 作者:行者123 更新时间:2023-11-30 20:08:30 24 4
gpt4 key购买 nike

内存尚未释放请帮忙解决这个问题

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

最佳答案

来自reference

有两点

  1. A block of memory previously allocated by a call to malloc, calloc or realloc is deallocated, making it available again for further allocations.
  2. Notice that this function does not change the value of ptr itself, hence it still points to the same (now invalid) location.

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

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

关于c - 结构体指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com