以下C代码中的内存泄漏

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.该函数返回与键关联的正确值,但仍显示此类错误.

Oli*_*rth 5

你还需要free(node123).

但这不是错误消息告诉你的.

你也取消引用一个没有指向有效内存的指针(在线上node123->pointers[0] = number).你没有分配任何内存pointers指向,所以解除引用就像这样会写入内存中的随机区域.