我想确定一个sigsegv的原因

我正在写一个gentoo linux和redhat linux的应用程序,其中的一个function总是在Redhat机器上崩溃

usleep(100000); Display *display; display = XOpenDisplay(NULL); Window w; int x,y,i; unsigned m; Window root = XDefaultRootWindow(display); XQueryPointer(display,root,&root,&w,&x,&y,&i,&i,&m); XImage *image; sleep(1); image = XGetImage(display,root,0,0,1366,768,AllPlanes,XYPixmap); int pixel = XGetPixel(image,x,y); printf("\\clr(%i,%i,%i){}\n",x,y,pixel); XCloseDisplay(display); 

这个函数总是在rhel机器上出现分段错误

运行gdb中的progrma:编程接收到的信号SIGSEGV,分段错误。 0x000000369942cb48在?? ()from /usr/lib64/libX11.so.6缺less单独的debuginfos,请使用:debuginfo-install atk-1.30.0-1.el6.x86_64 cairo-1.8.8-6.el6_6.x86_64 expat-2.0.1- 11.el6_2.x86_64 fontconfig-2.8.0-5.el6.x86_64 freetype-2.3.11-15.el6_6.1.x86_64 gdk-pixbuf2-2.24.1-6.el6_7.x86_64 glib2-2.28.8-4。 el6.x86_64 glibc-2.12-1.166.el6_7.1.x86_64 gtk2-2.24.23-6.el6.x86_64 libX11-1.6.0-6.el6.x86_64 libXau-1.0.6-4.el6.x86_64 libXcomposite-0.4 .3-4.el6.x86_64 libXcursor-1.1.14-2.1.el6.x86_64 libXdamage-1.1.3-4.el6.x86_64 libXext-1.3.2-2.1.el6.x86_64 libXfixes-5.0.1-2.1.el6 .x86_64 libXi-1.7.2-2.2.el6.x86_64 libXinerama-1.1.3-2.1.el6.x86_64 libXrandr-1.4.1-2.1.el6.x86_64 libXrender-0.9.8-2.1.el6.x86_64 libXtst-1.2。 2-2.1.el6.x86_64 libpng-1.2.49-2.el6_7.x86_64 libselinux-2.0.94-5.8.el6.x86_64 libxcb-1.9.1-3.el6.x86_64 pango-1.28.1-10.el6。 x86_64 pixman-0.32.4-4.el6.x86_64 zlib-1.2.3-29.el6.x86_64

不幸的是,我不能为rhel机器安装任何额外的软件包(或从第三方软件仓库安装)

回溯:(gdb)bt

0 0x000000369942cb48在? ()从/usr/lib64/libX11.so.6

main(argc = 2,argv = 0x7fffffffe148)中的0x00000000004048ce在tat.c:92

第92行是:int pixel = XGetPixel(image,x,y);

该应用程序工作正常,如果该行被删除

谢谢

使用XGetWindowAttributes来查找屏幕的实际宽度/高度。 不要使用硬编码的值。

最有可能的是这行返回NULL:

 image = XGetImage(display,root,0,0,1366,768,AllPlanes,XYPixmap); 

手册页说: 如果发生问题,XGetImage返回NULL。

但是,这个错误可能是由前一行的错误触发的 – 正如在注释中提到的那样,您应该检查所有这些调用的成功/失败的返回值。