gpt4 book ai didi

c - realloc 奇怪的内存泄漏

转载 作者:行者123 更新时间:2023-11-30 19:43:58 25 4
gpt4 key购买 nike

我有一棵n叉树:

struct node {
char *data;
int numofkids;
struct node **kids;
}

和一个函数:

addToParent(struct node *parent, struct node *kid);

将 child 与 parent 联系起来。

每次我想添加一个新 child 时,我都会通过重新分配父亲的 child 数组来做到这一点。

正文:

  parent->numofkids ++;
parent->kids = realloc(parent->kids, parent->numofkids * sizeof(char *));
parent->kids[(parent->numofkids) - 1] = kid;

我使用 valgrind --leak-check=yes ./myprog 运行我的程序,它显示来自 addToParent 函数的 realloc 函数的内存泄漏。这意味着我必须 free() 一些东西?但什么?我不会删除 child ,我只是将给定的 child 添加到给定的 parent 中。

瓦尔格林德:

Valgrind output

最佳答案

使用realloc()的正确方法是

struct node * temp = realloc(parent->kids, parent->numofkids * sizeof(char *));
if(temp != NULL)
parent->kids = temp;
else
{
/* take necessary action when allocation fails */
}

因为 realloc() 可能会失败,如果失败,您最终将丢失 realloc() 调用之前的原始数据。使用完内存后,您需要free()它。

关于c - realloc 奇怪的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28915036/

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