我正在为gentoo linux和redhat linux编写一个应用程序,其中一个功能总是在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英寸??()来自/usr/lib64/libx11.so.6
缺少单独的调试信息,use: 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 U 64 libxcb-1.9.1-3.el6.x86 U 64 pango-1.28.1-10.el6.x86 U 64 pixman-0.32.4-4.el6.x86 U 64 zlib-1.2.3-29.el6.x86 U 64
很遗憾,我无法为RHEL计算机安装任何其他软件包(或从第三方回购安装)
回溯:
(gdb)英国电信
0 0x000000369942CB48英寸??()来自/usr/lib64/libx11.so.6
1 0x0000000000408CE在TAT.C:92的MAIN(argc=2,argv=0x7fffffffe148)中
第92行是:
int pixel=xGetPixel(图像,x,y);
如果删除该行,则应用程序工作正常
谢谢

最佳答案

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

关于c - 我想确定sigsegv的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34661001/

10-12 14:24