[valgrind] Probleme mit XParseColor und XAllocColor. Wie Farben Fenstern RICHTIG zuweisen und zeichnen lassen?



  • Hallo c-community,

    ich hatte hier http://www.c-plusplus.net/forum/325704 einen Beitrag zu Problemen mit Valgrind und XLib eröffnet. Da ich den Fehler nun einschränken kann, habe ich den Thread geschlossen und einen genaueren eröffnet.

    Das Problem (es handelt sich um ein etwas größeres Projekt) mit Valgrind lässt sich auf ein paar Zeilen Quellcode einschränken:

    /*
     *   Variablendeklaration
     */
    Display* Dsp;        // ist früher mich XOpenDisplay(NULL) initialisiert
    Window   Wnd;
    char     cFGround = "rgb:00/00/00";
    XColor   FGround;
    char     cBGround = "rgb:ff/ff/ff";
    XColor   BGround;
    
    Colormap ColMap = DefaultColormap(Disp, 0);
    XParseColor(Disp, ColMap, cFGround, &FGround);    // hier liegt der Fehler
    XAllocColor(Disp, ColMap, &FGround);             // hier liegt der Fehler
    
    // gleiches habe ich mit BGround gemacht
    
    // Fenster öffnen
    Wnd = XCreateSimpleWindow(Disp, RootWnd, X, Y, Width, Height, 1, FGround.pixel, BGround.pixel);
    

    Diese Variante der Farbenzuweisung habe ich z.B. hier https://www.youtube.com/watch?v=Bqc2c5ahzNg&list=PLBrsMiFznAjl8mU3i4k5POyWdnygv7_BL ca. min 14 gefunden.
    Mit dem oben aufgeführten Quellcode kommen folgende Fehler vor:
    - Verbindungsabbrüche zum XServer
    - Fenster initialisiert keine Subelemente (leeres Fenster)
    - Bei korrektem Fensteraufbau mit Subelementen, schließt das Programm nicht vollständig ([STRG]+C notwendig, damit Valgrind sich beendet)

    Fehler treten ca. 9/10 Versuchen auf.

    Wenn ich die XCreateWindow-Funktion wie folgt abändere:

    Wnd = XCreateSimpleWindow(Disp, RootWnd, X, Y, Width, Height, 1, BlackPixel(Disp, Scr), WhitePixel(Disp, Scr));
    

    funktioniert der Quellcode 10/10 mal korrekt(Zeilen mit XAllocColor und XParseColor auskommentiert). Wenn die Zeilen mit XParseColor und XAllocColor nicht auskommentiert sind, dann treten die Fehler wieder auf.

    Also scheint meine gewählte Variante die Farben den Fenstern/ Subelementen zu zuweisen falsch/ fehlerhaft zu sein.#

    Wie weise ich die Farben richtig zu, so dass Valgrind keine Probleme macht und ich Speicherlecks weiterhin ordentlich verhindern kann.

    Vielen Dank

    mirrowwinger

    [Edit1] Also bin jetzt so weit, dass der Fehler bei XAllocColor auftritt. Wenn ich XParseColor benutze sehe ich leider nicht was sich an der 4. Variable (XColor) ändert. Hier bleibt bei ddd die Variable vor und nach XParseColor {...}. Könnte hier der Fehler liegen?[/Edit]


  • Mod

    char     cFGround = "rgb:00/00/00";
    

    Ich habe gesunde Zweifel, dass das so richtig ist.



  • SeppJ schrieb:

    char     cFGround = "rgb:00/00/00";
    

    Ich habe gesunde Zweifel, dass das so richtig ist.

    Es sollte allerdings auch nicht kompilieren...?


  • Mod

    Nathan schrieb:

    SeppJ schrieb:

    char     cFGround = "rgb:00/00/00";
    

    Ich habe gesunde Zweifel, dass das so richtig ist.

    Es sollte allerdings auch nicht kompilieren...?

    Stimmt. Womit klar ist, dass mirrowwinger uns hier irgendeinen Phantasiecode präsentiert, der vollkommen nutzlos ist, um seine Frage zu beantworten.

    @mirrowwinger: Siehe meine Signatur.


Anmelden zum Antworten