【问题标题】:Whats SIGSEGV, Segmentation fault in QtWhats SIGSEGV,Qt 中的分段错误
【发布时间】:2011-01-28 02:13:07
【问题描述】:

我有一个 Qt 程序,它显示它通过 UDP 接收的数据。 它可以正常工作大约 30 秒,但过了一段时间它会出现分段错误并崩溃。这 30 秒也不是固定的。

我用调试器得到了这个:

Program received signal SIGSEGV, Segmentation fault.
0x003c6fd4 in ?? () from /usr/lib/libQtGui.so.4

谁能告诉我错误可能在哪里?

【问题讨论】:

  • 如果您下载并使用调试版本的 libQT,您应该能够在堆栈跟踪中看到它崩溃的确切位置。提示,如果您使用的是 rpm 系统,请安装 qt-debug*.rpm

标签: qt segmentation-fault


【解决方案1】:

这意味着您的程序试图访问不属于它的内存。基本上,您的代码中有一个包含无效值的指针 - 此错误的常见来源是取消引用 NULL 指针。

【讨论】:

  • @wic 在您彻底证明您的代码中没有错误之前,永远不要这样想。
  • Qt 代码中没有错误,显然这是我的一个愚蠢的错误。
  • 我得到同样的错误,但仍然无法理解我应该做什么。
【解决方案2】:

您需要一个调试器(并确保您有带有调试信息的二进制文件)——检查崩溃站点的堆栈跟踪。我几乎假设您自己的代码会出现在某个地方,这就是开始的重点。检查分配、缓冲区大小……

【讨论】:

  • 是的,调试器帮了大忙。以前没怎么用过。
【解决方案3】:

确保您已分配要分配数据的数组。

我经常因为未分配而出现此错误。

我用过的例子:

char* m_tempBuff;
*(int*) m_tempBuff = i;

后来改成,效果很好:

char m_tempBuff[sizeof(int)];
*(int*) m_tempBuff = i;

祝你好运! :)

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2012-06-01
    • 2020-06-26
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多