c - 我想确定 sigsegv 的原因

标签 c linux x11 xlib

我正在为 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 中运行程序: 程序收到信号 SIGSEGV,段错误。 0x000000369942cb48 在 ?? () 来自/usr/lib64/libX11.so.6 缺少单独的调试信息,使用: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 机器安装任何额外的软件包(或从第 3 方存储库安装)

回溯: (gdb) BT

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

1 0x00000000004048ce in main (argc=2, argv=0x7fffffffe148) at tat.c:92

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

如果删除该行,应用程序将正常运行

谢谢

最佳答案

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

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

相关文章:

c - 如何计算C中的 float ?

c - 读取以 CR 结尾的关键字文本文件

objective-c - cgo godefs 和 Objective-C

linux - bash 脚本中的 z${variable} 和 zfalse 是什么意思?

php - PHP 中 exec() 的问题

x11 代码无法在代码块中编译

c - 在没有互联网访问的情况下将头文件安装到 linux 机器上

c++ - 如何从主类中调用 C++ 中的函数?

linux - 如何在 linux 上使用 ffmpeg 录制音频?

c - 为什么我的简单 GLX 应用程序会泄漏内存?