嗨,我的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);

09-07 05:54