XCreateColormap产生分割错误

mrwjdhj3  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(66)

我不知道这是怎么回事。
我花了大约3个小时试图修复它,但没有运气。我的代码是:`

temp->wA.border_pixel = BlackPixel(temp->d, temp->sID);
    temp->wA.background_pixel = WhitePixel(temp->d, temp->sID);
    temp->wA.override_redirect = true;
    temp->wA.colormap = XCreateColormap(temp->d, RootWindow(temp->d, temp->sID), temp->vI->visual, AllocNone);
    temp->wA.event_mask = ExposureMask;

函数的完整代码如下:

window *createWindow(int height, int width, const char *name)
{
    window *temp = (window *)malloc(sizeof(window));
    temp->d = XOpenDisplay(NULL);
    temp->s = DefaultScreenOfDisplay(temp->d);
    temp->sID = DefaultScreen(temp->d);
    int tempattribs[] = {
        GLX_RGBA,
        GLX_DOUBLEBUFFER,
        GLX_DEPTH_SIZE, 24,
        GLX_STENCIL_SIZE, 8,
        GLX_RED_SIZE, 8,
        GLX_GREEN_SIZE, 8,
        GLX_BLUE_SIZE, 8,
        GLX_SAMPLE_BUFFERS, 0,
        GLX_SAMPLES, 0,
        None};
    memcpy(temp->attribs, tempattribs, sizeof(tempattribs));
    temp->vI = glXChooseVisual(temp->d, temp->sID, temp->attribs);
    if (temp->vI == NULL)
    {
        perror("ERROR: GLXCHOOSEVISUAL FAILED!\n");
        return NULL;
    }
    temp->wA.border_pixel = BlackPixel(temp->d, temp->sID);
    temp->wA.background_pixel = WhitePixel(temp->d, temp->sID);
    temp->wA.override_redirect = true;
    temp->wA.colormap = XCreateColormap(temp->d, RootWindow(temp->d, temp->sID), temp->vI->visual, AllocNone);
    temp->wA.event_mask = ExposureMask;
    temp->w = XCreateWindow(temp->d, RootWindow(temp->d, temp->sID), 0, 0, height, width, 0, temp->vI->depth, InputOutput, temp->vI->visual, CWBackPixel | CWColormap | CWBorderPixel | CWEventMask, &temp->wA);
    temp->c = glXCreateContext(temp->d, temp->vI, NULL, 1);
    glXMakeCurrent(temp->d, temp->w, temp->c);
    return temp;
}

如果你想知道发生了什么,我有一个包含所有元素的结构体;上面的代码初始化元素。2下面是结构体:

typedef struct window
    {
        Window w;
        Display *d;
        Screen *s;
        XEvent e;
        int sID;
        bool running;
        XVisualInfo *vI;
        GLXContext c;
        XSetWindowAttributes wA;
        int attribs[];
    } window;

`
我在上面运行了一个调试器,得到了以下结果:

typ
Thread 1 "main" received signal SIGSEGV, Segmentation fault.
0x0000007ff7e10754 in _XcmsAddCmapRec () from /lib/aarch64-linux-gnu/libX11.so.6e here
6yoyoihd

6yoyoihd1#

我终于完成了它,通过创建另一个色彩Map表,并分配原来的色彩Map表到新的。

相关问题