C++ 我的Xlib包装类(C+;+;)中的分段错误
我试图为Xlib库创建一个包装器类,但我遇到了一个分段错误!我对C++是新的,这可能超出了我的深度,也许我的目标设定得很高,除了这个问题,有人能告诉我为什么我会得到这个分割错误吗?C++ 我的Xlib包装类(C+;+;)中的分段错误,c++,linux,segmentation-fault,xlib,x11,C++,Linux,Segmentation Fault,Xlib,X11,我试图为Xlib库创建一个包装器类,但我遇到了一个分段错误!我对C++是新的,这可能超出了我的深度,也许我的目标设定得很高,除了这个问题,有人能告诉我为什么我会得到这个分割错误吗? 我相信这是我得到的回溯: Program received signal SIGSEGV, Segmentation fault. In XMapWindow () (/usr/lib/libX11.so.6) At /home/elliot/Programming/C and C++/XWindows/src
我相信这是我得到的回溯:
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
您的错误表明
显示
或窗口
到XMapWindow()
的参数不正确
您需要在代码中包含更多的错误检查,特别是对调用XOpenDisplay
和XCreateWindow
的结果
我能看到的唯一明显的错误是,您将CWBackPixel
标志传递给XCreateWindow
,但未初始化属性
参数。与纯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);
}
请不要在本网站上使用pastebin及其衍生物。尝试获取回溯,这对定位问题有很大帮助。您可以通过在启用调试的情况下编译程序来实现这一点(
-g
选项,当使用g++时),然后在调试器中运行它(例如gdb a.out
然后键入run
,然后在它崩溃后bt
获取回溯)。嗯,pastebin很好-代码太长,无法复制并粘贴到这里。嗨,我是初学者,需要更多的关于如何用C++包装Xlib的信息。就像这里的简单例子。在哪里可以买到?谢谢嗯,如果我将XMapWindow(display,window)和整个循环函数移动到构造函数中,它似乎工作得很好,所以这可能是我在变量范围方面犯的一个非常愚蠢的错误?非常感谢!你真让我高兴!我正要放弃!:D