【发布时间】:2026-01-29 01:35:01
【问题描述】:
请查看我的源文件,它们有点太长了,无法在此处发布:
X11Painter.cpp: @987654321@
X11Painter.h: @987654322@
这个类的行为在我看来很奇怪。
我有以下测试用例:
#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 出现段错误的原因时,我发现 show() 中的大多数变量都被覆盖并且与构造函数中的完全不同。
我输入int some_test 看看发生了什么。为什么值会发生变化?
如果我做printf("%p\n", this),指针也会改变。我怀疑在某个地方,这个指针被覆盖了。但是为什么会这样呢?用 ddd 调试告诉我 this->some_value 在退出构造函数时被修改了。
使用测试类(具有公共构造函数、一个公共方法和一个私有变量的类)进行简短测试没有任何问题。
有人知道为什么会发生这种奇怪的事情吗? 我知道堆栈上的变量会发生什么,但我们仍然在 main 那里......
可能与 X11 库有关吗?
【问题讨论】:
-
您应该使您的源文件足够小,以便在此处发布。这有两个好处:第一,更多的人会看到它们;其次,在缩小它们的过程中,您可能会自己找到问题的根源。
标签: c++ pointers segmentation-fault x11