Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的Xlib包装类(C+;+;)中的分段错误_C++_Linux_Segmentation Fault_Xlib_X11 - Fatal编程技术网

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

我试图为Xlib库创建一个包装器类,但我遇到了一个分段错误!我对C++是新的,这可能超出了我的深度,也许我的目标设定得很高,除了这个问题,有人能告诉我为什么我会得到这个分割错误吗?

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

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