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

exdqitrt  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(99)

我在我的代码中调用xcb_key_symbols_alloc(我正在Xephyr中测试)。如果屏幕较小(例如,960x540),一切都很好,但当我在更大的屏幕上尝试时(eidogg. 1280x720),它突然开始返回NULL。它也工作,如果我把它放在我的主显示器(gnome正在运行的地方),它突然又开始工作了。
为什么会发生这种情况,我该如何解决?

falq053o

falq053o1#

为什么会发生这种情况,我该如何解决?
让我们看看源代码!Debian代码库找到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))放在一些随机的地方,并使用它来找出连接中断/进入错误状态的确切位置。

相关问题