请看看我的源文件,他们有点太长,张贴在这里: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时,我发现大部分变量都被覆盖,并且在show()
中完全不同于构造函数中的变量。
我把int some_test
看看发生了什么。为什么地狱是价值的变化?
如果我做printf("%p\n", this)
,指针也会改变。我怀疑在某个地方,这个指针被覆盖。但为什么会发生?用ddd调试告诉我,this-> some_value在退出构造函数时被正确修改。
使用testclass(具有公共构造函数的类,一个公共构造函数和一个私有变量)进行简短测试并没有任何问题。
有没有人知道为什么会发生这种奇怪的事情? 我知道堆栈上的变量会发生什么变化,但我们仍然处于主要变量的状态......
可能与X11库有关吗?
你应该使你的源文件小到足以在这里发布。这有两个好处:首先,更多的人会看到他们;其次,在缩小它的过程中,你可能会自己找到问题的根源。 – TonyK 2010-12-11 14:06:41