[C++] Segmentationfault im Destruktor?

  • Wie kann es bei einem "delete" zu einem Segfault kommen?


    Code
    Program terminated with signal 11, Segmentation fault.
    b#0  0x0000000000000031 in ?? ()
    (gdb) bt
    #0  0x0000000000000031 in ?? ()
    #1  0x000000000051dc55 in cListBase::Clear (this=0x7f0c60) at tools.c:2091
    #2  0x0000000000472453 in main (argc=<optimized out>, argv=<optimized out>) at vdr.c:1465


    Besagte Stelle:

    Code
    void cListBase::Clear(void)
    {
      while (objects) {
            cListObject *object = objects->Next();
            delete objects; // hier kracht es
            objects = object;
            }
      objects = lastObject = NULL;
      count = 0;
    }


    Das passiert nur sporadisch beim beenden des vdr.

  • Evtl. wurde das Objekt schon an anderer Stelle freigegeben (double free Problem).
    Dazu müsste man rausfinden, was das für ein Objekt ist und wer sich darum kümmert.


    Lars

  • Das ist schon mal ein guter Start.


    Jetzt müsste man im skindesigner nach cListObject schauen, was es da so gibt und ob da eine Liste falsch abgeräumt wird. Louis hilft sicherlich, wenn er kann.


    Man muss dazu wissen, dass man nur mit new erzeugte Objekte in eine cList packen darf, weil ein Clear bzw. Entfernen aus der Liste automatisch ein delete des Objektes durchführt.


    Lars

  • Moin,


    ich habe eben ca. 10 mal den VDR beendet...kein einziger Crash.


    Ich habe mal im Code nachgesehen...die einzige relevante Stelle, an der cListObject benutzt wird, ist in cRecordingsFolderInfo. Vielleicht hat Lars ne spontane Idee, woran das liegen könnte ;)


    Ciao Louis

  • Kannst du den Backtrace inkl. Debug-Symbole für skindesigner noch mal nachvollziehen, vielleicht sieht man dann noch ein bisschen mehr.
    Momentan hab ich noch keine Idee.


    Lars.

  • ich hab noch mal gesucht, finde aber nichts und kann es auch nicht reproduzieren. Vielleicht hängt es mit irgend einem Aufnahmenamen zusammen, einer, der irgendwie anders ist. :)


    louis
    Kleine Whitespace-Aufräum-Patch:


    Lars.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!