gpt4 book ai didi

c - 以下 C 代码中的内存泄漏

转载 作者:行者123 更新时间:2023-11-30 19:54:50 28 4
gpt4 key购买 nike

我如何释放从以下代码中泄漏的内存。

struct object_one{
int value;
}*object,object_node;

struct node_one {
void **pointers;

}*node, node_node;

node sample(){
object number;
node node123;
node123 = malloc(sizeof(node_node));
number = malloc(sizeof(object_node));
number->valu = malloc(sizeof(int));
number->value = 9;
node123->pointers[0]=number;
free(number);
return node123;
}

我是否以正确的方式释放number引用的内存。一旦我执行了上述操作,我就会收到错误;

Invalid read of size 4
==15957== at 0x403804: main (abc.c:1255)
==15957== Address 0x540cb50 is 0 bytes inside a block of size 4 free'd

请建议我如何防止这种情况下的内存泄漏?提前致谢。

[编辑]

嗨,实际上上面提到的不是我真正的代码。但我已尽力反射(reflect)我的代码的结构和语义。实际上我正在实现一个数据结构。 number 是一些临时存储,node123 是我真正的数据库。我想在数据库中分配 number 的值并取消引用它。number 类型是数据库的一个组件。

[编辑2]

对应于第1255行的代码正在打印对象即值所保存的值。它看起来像:

   object tempObject;
tempObject = search_object(root,50);
[1255] printf("Key is %d ------>value is %d\n",50,tempObject->value);

此处,函数search_object 搜索与键50 对应的值。该函数返回与该键关联的正确值,但仍然显示此类错误。

最佳答案

您还需要释放(node123)

但这不是错误消息告诉您的内容。

您还取消引用未指向有效内存的指针(在 node123->pointers[0] = number 行上)。您还没有为指针分配任何内存来指向,因此像这样取消引用它将会写入内存中的随机区域。

关于c - 以下 C 代码中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380020/

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