Ich habe ein seltsames und nerviges Problem mit einer der Anwendung, die ich bei der Arbeit verwenden. Die Anwendung wird in C++ geschrieben, und wenn die Anwendung beendet wird (entweder die Hauptfunktionsrückgabe oder exit
wird aufgerufen), stürzt sie mit einem Segmentierungsfehler ab. Der Segmentierungsfehler scheint durch den doppelten Zeiger im Destruktor der Klasse basic_string verursacht worden zu sein. Ich kann den Quellcode nicht hinzufügen, aber ich kann sagen, dass die App extrem einfach ist und ich nicht direkt einen Zeiger in meinem Code verwende. Die App ruft nur eine Funktion aus einer Bibliothek auf.SegFault auf Anwendung beenden
Valgrid identifiziert das folgende Problem:
==5402== Invalid read of size 4
==5402== at 0x549F05F: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() (atomicity.h:49)
==5402== by 0x41D1BA4: ??? (in ../Functions.so)
==5402== by 0x436D873: ??? (in ../Functions.so)
==5402== by 0x967674: _dl_fini (in /lib/ld-2.12.so)
==5402== by 0x9A7EAE: exit (in /lib/libc-2.12.so)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402== Address 0x55ec808 is 8 bytes inside a block of size 15 free'd
==5402== at 0x4007895: operator delete(void*) (vg_replace_malloc.c:480)
==5402== by 0x549EF67: std::string::_Rep::_M_destroy(std::allocator<char> const&) (new_allocator.h:110)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402==
==5402== Invalid free()/delete/delete[]/realloc()
==5402== at 0x4007895: operator delete(void*) (vg_replace_malloc.c:480)
==5402== by 0x549EF67: std::string::_Rep::_M_destroy(std::allocator<char> const&) (new_allocator.h:110)
==5402== by 0x41D1BA4: ??? (in ..../Functions.so)
==5402== by 0x436D873: ??? (in .../Functions.so)
==5402== by 0x967674: _dl_fini (in /lib/ld-2.12.so)
==5402== by 0x9A7EAE: exit (in /lib/libc-2.12.so)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402== Address 0x55ec800 is 0 bytes inside a block of size 15 free'd
==5402== at 0x4007895: operator delete(void*) (vg_replace_malloc.c:480)
==5402== by 0x549EF67: std::string::_Rep::_M_destroy(std::allocator<char> const&) (new_allocator.h:110)
==5402== by 0x810F8C2: main (Checker.C:146)
==5402==
Die Anwendung auf Gemeinschafts- und statische Bibliothek verknüpft ist. Function.so
ist eine gemeinsam genutzte Bibliothek, die möglicherweise statischen Code enthält. Dieses Problem hängt mit der Verknüpfungsphase zusammen, da die App abhängig von der Reihenfolge, in der Bibliotheken mit meiner ausführbaren Datei verknüpft sind, möglicherweise nicht abstürzt.
Ich habe wirklich Mühe, dieses Problem anzugehen, jede Idee, was könnte die Ursache für ein solches Problem sein? Irgendein Vorschlag, wie man vorgeht, um dieses Problem zu untersuchen?
Können Sie in den Code der Bibliothek schauen? Vielleicht haben einige statische Daten einen fehlerhaften Destruktor oder Konstruktor. –
Ja, ich besitze die lib. Ich kann es mir ansehen –