Tag: 内存损坏

很难跟踪内存损坏 – 运行Valgrind时运行正常,没有错误

我们有一个复杂的程序,在重载输入(实际上是任何输入)上运行良好,没有实现multithreading。 我们用线程池实现了multithreading,给定这些输入参数我得到了这些结果: ( 注意 :我说没有错误 ,这意味着我已经用valgrind -v进行了测试,当我说没有内存泄漏时 ,这意味着我已经用valgrind –leak-check=full -v测试了它)。 small_file:成功运行超过1个worker(线程),没有valgrind错误,没有内存泄漏 medium_file:使用1个worker成功运行,没有错误/内存泄漏。 有> 1名工人,我得到:a。 通常是堆损坏错误,b。 双自由。 当使用valgrind -v运行> 1个worker时,程序成功完成。 此外,没有从valgrind打印错误,即ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2) 。 现在我从valgrind开始没有得到任何错误,我该怎么做才能找到这个复杂而庞大的应用程序中的内存损坏问题? DevelopmentEnvironment: Ubuntu,64bit,gcc版本:4.7.2和4.8.1(不同的计算机,更新版本的Ubuntu)。

在malloc()之后写入指针越界,不会导致错误

当我尝试下面的代码时它工作正常。 我错过了什么吗? main() { int *p; p=malloc(sizeof(int)); printf(“size of p=%d\n”,sizeof(p)); p[500]=999999; printf(“p[0]=%d”,p[500]); return 0; } 我尝试使用malloc(0 * sizeof(int))或其他任何东西,但它工作得很好。 当我根本不使用malloc时,程序只会崩溃。 因此,即使我为数组p分配了0个内存,它仍然可以正确地存储值。 那么,为什么我甚至打扰了malloc呢?