web-dev-qa-db-ja.com

Whats SIGSEGV、Qtのセグメンテーション違反

UDP経由で受信したデータを表示するQtプログラムがあります。約30秒間は正常に動作しますが、しばらくするとセグメンテーション違反が発生してクラッシュします。この30秒も固定されていません。

私はデバッガーを使用してこれを手に入れました:

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

エラーがどこにあるのか誰か教えてもらえますか?

11
user269037

これは、プログラムがそれに属していないメモリにアクセスしようとしたことを意味します。基本的に、コードのどこかに無効な値を含むポインターがあります。このエラーの一般的な原因は、NULLポインターの逆参照です。

13
anon

デバッガーが必要です(そしてデバッグ情報を含むバイナリがあることを確認してください)-クラッシュサイトでスタックトレースを確認してください。私はあなた自身のコードがどこかに現れるとほとんど思います、そしてこれは最初のポイントです。割り当て、バッファサイズを確認してください…

2

データを割り当てる配列が割り当てられていることを確認してください。

割り当てを行わなかったため、常にこのエラーが発生しました。

私が使用した例:

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

後でに変更され、それは機能しました:

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

頑張ってください! :)

1
user2587316