を上書き私のソースファイルを見てください、彼らはここに投稿するビット長すぎます:C++:このポインタは
X11Painter.cpp: http://pastebin.com/gu4SrHUr
X11Painter.h: http://pastebin.com/3ktp1Fvn
このクラスの振る舞いがあります私の意見では非常に奇妙な。
私がいる、次のテストケース:
#include "X11Painter.h"
int main()
{
X11Painter p ;
p.show();
}
ライン
g++ -O0 -g -o test2 test2.cpp X11Painter.cpp -lX11 -lXfixes -lXinerama
でそれをコンパイルし、単にそれは次のようん実行している:私は
this->some_test=1234
this->screen:0
1:: this->display='0x8b73008'; this->window='77594625'
width: 3200
0xbff91bdc
this->some_test=1234
this->some_test=3682292
Segmentation fault
よX11のウィンドウをマップしようとしていますX11Painter::show()
X11Painter.cpp:83がsegfaultingである理由を調査し始めたとき、コンストラクタ内にあるよりも多くの変数が上書きされ、完全に異なっていることが分かりました。
私はint some_test
に何が起こっているか見てみましょう。なぜ値が変わるのですか?
printf("%p\n", this)
を実行すると、ポインタも変更されます。私はどこかで、このポインタが上書きされていると思う。しかし、なぜこれは起こっているのですか? dddを使ったデバッグでは、this-> some_valueがコンストラクタを終了している間に修正されています。
テストクラス(パブリックコンストラクタ、パブリックメソッドとプライベート変数を持つクラス)を使って簡単なテストを行うと問題なく動作します。
この奇妙なことが起こっている理由は誰にも分かりますか? 私はスタック上にある変数に何が起こっているのか知っていますが、まだメインにあります。
X11-ライブラリに関連するかもしれませんか?
ソースファイルをここに投稿するのに十分小さくする必要があります。これには2つの利点があります:第1に、より多くの人々がそれらを見るでしょう。第二に、それらを小さくする過程で、あなた自身が問題の原因を見つけるかもしれません。 – TonyK