我目前正在开展一个项目,我偶尔需要直接使用X11函数。来自一个广泛记录所有内容的Windows世界,我在查找和浏览相对稀疏的linux文档时遇到了一些麻烦。
例如,如果我有代码:
Display* disp;
if (!(disp = XOpenDisplay(NULL))) {
return;
}
Window root = DefaultRootWindow(disp);
Screen* scr = XDefaultScreenOfDisplay(disp);
XCloseDisplay(disp);
我知道XCloseDisplay将清除Window root
,因为它会破坏所有窗口和资源ID。
我不知道的是,我是否需要根据示例手动XFree
Screen
从XDefaultScreenOfDisplay
等X函数返回的对象。
有关此案例的任何信息,甚至是何时使用Xfree的一般规则都将非常有用。
答案 0 :(得分:2)
Raw X,就像Windows SDK一样是C接口。
X-Windows约有7本手册,如http://shop.oreilly.com/product/9781565920026.do和http://shop.oreilly.com/product/9781565920033.do。这些都是自1992年以来一直存在。像Windows一样,它们充满了例子。另外还有互联网 - 只需输入命令,大多数页面都在线。
手册页将告诉您命令是否需要释放。
XDefaultScreenOfDisplay的手册页未提及释放,因此不需要它。
如果查看XGetVisualInfo的手册页,它会说你可以释放使用XFree返回的结构。
答案 1 :(得分:2)
应用程序不应直接修改显示和屏幕结构的任何部分。这些成员应该被认为是只读的,尽管它们可能会因显示器上的其他操作而改变。
这意味着这些结构由XLib管理,一个不应该
free
或XFree
他们。释放结构意味着它占用的内存可以分配给其他数据并最终被覆盖。