【问题标题】:Memory Leak in C application debug vs release modeC 应用程序调试与发布模式中的内存泄漏
【发布时间】:2014-03-06 23:24:43
【问题描述】:

我有一个非常大的应用程序,有 20,000 多行,用 C 语言编写,在 MinGW 编译器上编译。应用程序在发布模式下编译时存在内存泄漏,但在调试模式下似乎没有泄漏。我创建了一个运行计数器,以确保我有与 malloc() calloc() 调用一样多的 free() 调用。

显然我的代码库太大而无法在此处发布,所以我的问题是在调试和发布之间进行编译时会出现什么样的差异,这些差异会导致我可能想要调查的内存泄漏问题?

非常感谢!

【问题讨论】:

  • 为什么不直接在合适的泄漏工具下运行它,比如 valgrind ?这应该让你直接解决问题。
  • 我正在尝试 DrMemory
  • 您真的是指“内存泄漏”吗?换句话说,您可以看到堆随着您继续运行程序而增长,因为在“生产”模式下没有释放块?还是您的意思是“任何内存访问错误”-在调试模式下运行时会消失的段错误?后者比形成的更容易解释......你提到你会尝试 DrMemory。你成功了吗?

标签: c memory-leaks


【解决方案1】:

如果您在为调试而不是为生产而编译时使用不同的选项,您的程序的内存结构可能会略有不同(特别是不同的优化设置会影响这一点)。这对于格式正确的代码应该无关紧要,但是如果您正在读取或写入无效指针或超出数组的末尾,您正在覆盖的变量可能会改变,从而将无害的错误变成有害的,反之亦然.

【讨论】:

  • +1 - 所有调试/发布错误中有 99,999% 是 UB,被不同的代码/内存对齐方式等所掩盖。
猜你喜欢
  • 1970-01-01
  • 2010-11-08
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多