C valgrind内存泄漏

时间:2017-10-26 19:05:28

标签: c memory valgrind

您好我的Valgrind向我显示内存错误,但我找不到它。

  

== 18608 == HEAP SUMMARY:

     

== 18608 ==在退出时使用:1个块中的88个字节

     

== 18608 ==总堆使用量:4个分配,3个释放,2,220个字节分配

     

== 18608 ==

     

== 18608 ==搜索指向1个未释放块的指针

     

== 18608 ==检查了53,708字节

     

== 18608 ==

     

== 18608 == 1个块中的88个字节肯定会丢失1个丢失记录1

     

== 18608 ==在0x402D17C:malloc(在/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so中)

     

== 18608 == by 0x8   0485BF:pmalloc(在auf中)

     

== 18608 == by 0x8048680:main(在auf中)

     

== 18608 ==

     

== 18608 ==泄漏摘要:

     

== 18608 ==绝对丢失:1个块中的88个字节

     

== 18608 ==间接丢失:0个块中的0个字节

     

== 18608 ==可能丢失:0个块中的0个字节

     

== 18608 ==仍然可以访问:0个块中的0个字节

     

== 18608 ==抑制:0个块中的0个字节

     

== 18608 ==

     

== 18608 ==错误摘要:来自1个上下文的1个错误(被抑制:0从0开始)

     

== 18608 ==错误摘要:来自1个上下文的1个错误(被抑制:0从0开始)

1 个答案:

答案 0 :(得分:1)

您分配了两个不同的int * s;你没有释放第一个资源,但你没有做任何事情就释放第二个资源:

print_prim(pmalloc(n), laenge);
free(pmalloc(laenge));

要正确释放第一个资源,您可以执行以下操作:

int *p = pmalloc(n);
print_prim(p, laenge);
free(p);