问题 什么是SIGSEGV,Qt中的分段错误


我有一个Qt程序,它显示它通过UDP接收的数据。 它可以正常工作大约30秒,但过了一段时间它就会出现Segmentation Fault和崩溃。这30秒也没有修复。

我使用调试器得到了这个:

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

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


1801
2018-03-16 12:18


起源

如果您下载并使用libQT的调试版本,您应该能够在stacktrace中看到它崩溃的确切位置。提示,安装 qt-debug*.rpm 如果你在rpm系统上。 - Martin Wickman


答案:


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


13
2018-03-16 12:21



当然,QT代码中可能存在错误。 - Martin Wickman
@wic从不这么想,直到你详尽地证明你的代码中没有错误。
Qt代码中没有任何错误,显然这对我来说是一个愚蠢的错误。 - user269037
我得到了同样的错误,仍然无法理解我应该做什么。 - Alex Encore


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


2
2018-03-16 12:23



是的调试器是非常有帮助的。之前没有用过它。 - user269037


确保已分配要分配数据的阵列。

我不断分配这个错误。

示例我使用过:

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

后来改为,它的工作原理:

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

祝你好运! :)


1
2018-02-19 14:37