the*_*tna -2 c valgrind memory-leaks memory-management
我如何从他的代码中释放泄漏的内存.
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;
}
Run Code Online (Sandbox Code Playgroud)
我正在以正确的方式释放所引用的内存.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
Run Code Online (Sandbox Code Playgroud)
请建议我如何在这种情况下防止内存泄漏?提前致谢.
[编辑]
嗨,实际上上面提到的不是我的真实代码.但我已经尽力重新选择代码的sturcutre和语义.实际上我正在实施数据架构.number是一些临时存储,node123是我真正的数据库.我想number在数据库中分配值并取消引用它.numbertype是数据库的一个组件.
[EDIT2]
对应于行的代码1255是打印由.持有的值.object i'e value它看起来像:
object tempObject;
tempObject = search_object(root,50);
[1255] printf("Key is %d ------>value is %d\n",50,tempObject->value);
Run Code Online (Sandbox Code Playgroud)
这里函数search_object搜索对应于该键的值50.该函数返回与键关联的正确值,但仍显示此类错误.
你还需要free(node123).
但这不是错误消息告诉你的.
你也取消引用一个没有指向有效内存的指针(在线上node123->pointers[0] = number).你没有分配任何内存pointers指向,所以解除引用就像这样会写入内存中的随机区域.