2016-12-22 9 views
-4

初めてstackoverflowを実行しました。私はカスタムタイトルバーでカスタムフレームレスウィンドウのためにインターネット上で見つけた例を再現しようとしています。ここで私は私のIDEとしてQTクリエータを使用してのUbuntu 16.04を実行しているウェブサイト(私が英語でそれを読むことができるようにGoogle翻訳を使用していた)http://qt.developpez.com/tutoriels/braindeadbzh/customwindow/SIGSEGVを取得する

です。私は最新の64ビット版を持っています。

私は3.2をやった後、3.3に行く前に、それが言うところの行にSIGSEGVを取得しています: m_Cacheを削除してください。

デバッガで実行するとすべてがコンパイルされ、SIGSEGVが出てきます。 これは範囲外のエラーですが、その理由はわかりません。どんな提案や助けも大歓迎です。

Thxで事前に!

+1

m_Cacheが無効ポインタであるほとんどの場合(すなわち、それが非NULLであるが、以前に新しい演算子で割り当てられた有効なC++オブジェクト)が含まれていないメモリロケーションを指しています。 1つの共通の原因は、同じオブジェクトを複数回削除しようとすることです。別の一般的な原因は、ポインタを削除する前に、ポインタを有効な値(NULLまたは新しいオブジェクトで割り当てられたオブジェクトなど)に初期化することを無視することです。 –

+1

私はそのコードを簡単に見ました。 'm_Cache'をヌルポインタに初期化した場合、segfaultがなくなると思います:' QPixmap * m_Cache = nullptr; ' – qxz

+1

'valgrind'を使用してください。 – Velkan

答えて

2

m_cacheは、コンストラクタ内でNULL(C++ 11以上を使用する場合はnullptr)に初期化する必要があります。そうでない場合は、初期化されずに残り、最初にdelete m_cache行に達すると、 。 (NULLに削除を呼び出す/ nullptrポインタが有効であり、何もしないことに注意してください)

PS:アンフランス語DANSルtexte:

注意:NULLà初期化子àpensezルpointeur m_Cache DANSルconstructeur。

;)

関連する問題