Problem mit X11 Prog



  • Hallo ich habe ein Bischen mit X11 rumgespielt bekomme aber wenn ich folgendes Programm compiliere immer ein segmentation fault ich weis nicht wieso

    #include <X11/Xlib.h>
    #include <X11/Xutil.h>
    #include <stdio.h>
    #include <unistd.h>
    main(int argc, char *argv[])
    {
    Display *display;
    int x, y;
    unsigned int border_width;
    unsigned int width, height;
    int screen_number;
    int depth;
    char *dpy_number;
    Window win;
    screen_number = DefaultScreen(display);
    y = 100;
    x = 100;
    width = 100;
    height = 100;
    border_width = 1;
         XOpenDisplay(dpy_number);
      if(dpy_number == NULL)
         printf("err");
    win = XCreateSimpleWindow(display,RootWindow(display,screen_number),x,y,width,height, border_width, CopyFromParent,CopyFromParent);
    }
    

    ich benütze suse linux 9.3 und zum Compilieren den gcc
    mit folgendem Aufrauf

    cc prog.c -L /usr/X11R6/lib -l X11

    die einzige ausgabe ist segmentation fault
    bitte um hilfe



  • ich wollte noch folgende infos mitgeben

    das prog sollte einfach nur eine verbindung zum X server aufbaun und sein XCreateWindiw durchführen

    ich habe schon durch den gdb laufen lassen rausgekommen ist im backtrace

    #0 0x40052a1f in XOpenDisplay () from /usr/X11R6/lib/libX11.so.6
    #1 0x080485d3 in main()

    und das wars auch schon

    zum thema X11 ich befinde mich in den startlöchern von X11 aber mit dem rest der C sprache vertraut

    ich habe mich in der wikipedia erstmal ein bischen informiert und dann in google nach lösugen gefunden dann habe ich noch freunde befragt habe aber keine vernümpftigen resultate bekommen weil es zu diesem Thema keine Informationen gibt

    wollte ich nur noch sagen



  • Hallo Ich hab ja keine Ahnung von dem Zeug ich les hier nur als langeweile 🤡 aber

    screen_number = DefaultScreen(display);
    

    schaut bissel seltsam aus weil der pointer display auf gar nix vernünftiges zeigt. solltest du den ned vorher erst initialisieren 😕



  • display ist eine structur und oben deklariert

    Display *display;



  • also ich mein dein fehler gefunden zu haben (hab aber net viel ahnung von X11 und deswegen vermute ich es bloß)

    du hast folgenden code

    XOpenDisplay(dpy_number);
    

    dpy_number ist ein **char *** das keinen inhalt hat, nichtmal "" (also uninitalisiert) und das verursacht meiner meinung ein segmentation fault - außerdem gibt XOpenDisplay ein Display pointer zurück (hab keine X11 Reference geunden und hab mir das mal in andren Codes angeschaut - also 0 Garantie).

    versuchs mal damit:

    disp = XOpenDisplay(0);
    
      if(!disp)
        print("err");
    

    (und das default-screen zeugs weglassen - eine 0 bei XOpenDisplay sagt schon das der default-screen benutzt wird)

    mfg blan


Anmelden zum Antworten