我在我的代码中调用
xcb_key_symbols_alloc
(我正在 Xephyr 中测试)。如果屏幕较小(例如 960x540),一切正常,但是当我在更大的屏幕(例如 1280x720)上尝试时,它突然开始返回 NULL。如果我把它放在我的主显示器上(运行 gnome 的地方),它也会工作,它会突然再次开始工作。
为什么会发生这种情况以及我该如何解决它?
为什么会发生这种情况以及我该如何解决它?
我们看一下源代码! 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))
放在一些随机位置,并用它来找出连接中断/进入错误状态的确切位置。