嗨,我的Valgrind向我展示了内存错误,但我找不到它。
== 18608 ==堆摘要:
== 18608 ==在出口使用:1块中88字节
== 18608 ==总堆使用量:4个分配,3个空闲,分配的2,220个字节
== 18608 ==
== 18608 ==搜索指向1个未释放块的指针
== 18608 ==已检查53,708字节
== 18608 ==
== 18608 == 1块中的88个字节肯定在1的丢失记录中丢失
== 18608 ==在0x402D17C:malloc(在/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
== 18608 ==通过0x8
0485BF:pmalloc(在auf中)
== 18608 ==通过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)
最佳答案
您分配两个不同的int *
;您不会释放第一个资源,但是却不做任何事情就释放了第二个资源:
print_prim(pmalloc(n), laenge);
free(pmalloc(laenge));
为了正确释放第一个资源,您可以执行以下操作:
int *p = pmalloc(n);
print_prim(p, laenge);
free(p);