1

我正在尝试为 Xlib 库创建一个包装类,但出现分段错误!我是 C++ 的新手,这可能超出了我的深度,也许我的目标设定得很高,除了那个问题,有人能告诉我为什么我会遇到这个分段错误吗?
源文件
头文件
main.cpp

我相信这是我得到的回溯:

Program received signal SIGSEGV, Segmentation fault.
In XMapWindow () (/usr/lib/libX11.so.6)
At /home/elliot/Programming/C and C++/XWindows/src/MyWindow.cpp:49
4

1 回答 1

3

您的错误表明displaywindow参数XMapWindow()不正确。

您需要在代码中包含更多错误检查,尤其是对调用XOpenDisplay和的结果XCreateWindow

我能看到的唯一明显错误是您将CWBackPixel标志传递给XCreateWindow但未attributes初始化参数。与普通 C 不同,C++ 在声明结构时不会清除它们的内存内容。

编辑- 我当然错过了真正令人眼花缭乱的明显错误 - 您无意中在构造函数中重新声明了所有类成员变量。那将是您的范围问题。您需要从构造函数中的所有分配中删除类型名,例如:

MyWindow::MyWindow()
{   //ctor
    display = XOpenDisplay(NULL);
    visual = XDefaultVisual(display, 0);
    depth = XDefaultDepth(display, 0);
    window = XCreateWindow(display, XRootWindow(display, 0), 0, 0, MyWindow::default_width, MyWindow::default_height, 16, depth, InputOutput, visual, CWBackPixel, &attributes);
    XStoreName(display, window, MyWindow::default_caption.c_str());
    XSelectInput(display, window, ExposureMask | KeyPressMask | KeyReleaseMask);
}
于 2011-02-13T17:45:48.717 回答