为什么 xcb_key_symbols_alloc 在大屏幕上返回 NULL?

问题描述 投票:0回答:1

我在我的代码中调用

xcb_key_symbols_alloc
(我正在 Xephyr 中测试)。如果屏幕较小(例如 960x540),一切正常,但是当我在更大的屏幕(例如 1280x720)上尝试时,它突然开始返回 NULL。如果我把它放在我的主显示器上(运行 gnome 的地方),它也会工作,它会突然再次开始工作。

为什么会发生这种情况以及我该如何解决它?

linux x11 xcb
1个回答
0
投票

为什么会发生这种情况以及我该如何解决它?

我们看一下源代码! Debian Codesearch 发现 https://sources.debian.org/src/xcb-util-keysyms/0.4.0-1/keysyms/keysyms.c/?hl=74#L74

该函数有三种情况返回

NULL

  if (!c || xcb_connection_has_error(c))
    return NULL;

您正在传递一个

NULL
指针或已损坏的 XCB 连接。

  syms = malloc (sizeof (xcb_key_symbols_t));
  if (!syms)
    return NULL;

内存分配失败。

如果我必须猜测,我会说您的 XCB 连接已损坏/处于错误状态。既然你说这是关于根窗口的大小,那么你可能之前做了一个太大的

PutImage
请求?

随机

printf
调试的想法是将
printf("I am here and state is %d\n", xcb_connection_has_error(c))
放在一些随机位置,并用它来找出连接中断/进入错误状态的确切位置。

© www.soinside.com 2019 - 2024. All rights reserved.