0

我在一个相当大的项目中遇到了一些内存损坏问题,以控制一些科学硬件(约 6000 行),我不确定哪个是解决问题的最佳方法/工具。该项目使用 Qt 4.8,并使用 QtCreator 和 MinGW 构建。该程序或多或少地工作,但我遇到了一些稳定性问题。有时我会随机崩溃,但在某些情况下,当我稍微更改源代码时,程序会在完全相同的位置崩溃(以前工作过的位置)。这次它选择的位置是这样的:

 char stages2[1024];
 sprintf(stages2, "M-511.DD.LOAD\nNOSTAGE");

当我在 gdb 中运行它时,第二行给出了分段错误 (SIGSEGV) - 这告诉我程序的内存存在某种问题,因为我确定这两行是正确的。此外,“崩溃站点”会根据确切的源代码而变化;我什至在 Qt 使用的 Windows DLL 中看到过崩溃。

我已经研究了一些选项来找到问题的原因,但我遇到了一些困难:

  • 我已经下载了 DUMA,但无法在 MinGW 上编译它——我必须更改包含命令才能创建库,但现在其中一个测试程序失败了。(任何提示或二进制文件的链接,有人吗?)
  • 我也尝试过应用程序验证程序,但是当我运行它时,它总是停在同一个位置,我正在使用的第 3 方 DLL 正在泄漏句柄。我有理由确定这不是我的问题的原因,但我无法继续调试过程,因为 gdb 总是回到相同的位置(它只会在我使用应用程序验证程序时卡在那里)。
  • 最后,我用 Dr. Memory 运行了我的程序,但它在到达主窗口之前就崩溃了,没有给我任何有用的输出(我唯一看到的是 Qt 显然在浪费一些内存)。

对于最终摆脱此错误的最有希望的方法,我将不胜感激。

4

1 回答 1

-1

-Wall使用优化和(可能还有其他警告标志)进行编译,检查所有警告以确保没有任何可疑的事情发生。

使用 valgrind 之类的工具来检查内存管理混乱。

于 2014-03-10T20:27:11.773 回答