Process terminating with default action of signal 11 [SIGSEGV]
Baue ich ein C++ Projekt in Eclipse. Es verwendet SQLITE3 für Datenbank-und libxml für das Lesen bestimmte Daten aus einer XML-Datei. Der code wird kompiliert fein und die ausführbare Datei wird erzeugt. Jedoch wenn ich den binary-es endet mit dieser Meldung Segmentation fault (core dumped)
.
Wenn ich das Valgrind-profiler, um zu erkennen, wo der Speicherverlust ist bekomme ich diese riesige log-Datei was kann ich machen keinen Sinn.
==4960== Invalid read of size 4
==4960== at 0x41C6EB7: sqlite3SafetyCheckSickOrOk (sqlite3.c:22048)
==4960== by 0x41EADCA: sqlite3_close (sqlite3.c:112926)
==4960== by 0x804A551: Database::close() (CEMDAPnew.cpp:133)
==4960== by 0x805D2F3: CDataCoordinator::ReadVehicleMakeData(std::string) (DataCoordinator.cpp:2709)
==4960== by 0x80689D4: main (GauravWithoutMPI.cpp:36)
==4960== Address 0x4dc1fd0 is 64 bytes inside a block of size 512 free'd
==4960== at 0x402B06C: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4960== by 0x41B520F: sqlite3MemFree (sqlite3.c:15252)
==4960== by 0x41A2DF0: sqlite3_free (sqlite3.c:18986)
==4960== by 0x41EB0B4: sqlite3_close (sqlite3.c:113040)
==4960== by 0x804A551: Database::close() (CEMDAPnew.cpp:133)
==4960== by 0x805D2F3: CDataCoordinator::ReadVehicleMakeData(std::string) (DataCoordinator.cpp:2709)
==4960== by 0x80689D4: main (GauravWithoutMPI.cpp:36)
==4960==
==4960== Conditional jump or move depends on uninitialised value(s)
==4960== at 0x4532DD8: inflateReset2 (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x4532EC7: inflateInit2_ (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x512FE6B: ???
==4960==
==4960== Conditional jump or move depends on uninitialised value(s)
==4960== at 0x4532DD8: inflateReset2 (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x4532EC7: inflateInit2_ (in /lib/i386-linux-gnu/libz.so.1.2.3.4)
==4960== by 0x5056E135: ???
==4960==
==4960== Invalid read of size 4
==4960== at 0x80BD81C: CMdcevMM::loadXmlString(_xmlNode*, _xmlDoc*, unsigned char*) (ModelModule.cpp:2849)
==4960== by 0x810D73A: CSimCoordinator::LoadXmlString(char const*) (simCoordinator.cpp:8313)
==4960== by 0x8068A4E: main (GauravWithoutMPI.cpp:45)
==4960== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==4960==
==4960==
==4960== Process terminating with default action of signal 11 (SIGSEGV)
Ich brauche, um Einblick in diese Ausgabe. Kann mir jemand helfen, sinnvoll von diesem Fehler und was ist das Problem hier?
Dank.
InformationsquelleAutor sriramn | 2012-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst einmal sollten Sie beginnen, die Festsetzung
Invalid read
Fehler. Sie sind der wahrscheinlichste Grund des "Segmentation fault", das hat nichts mit memory leaks.Den ersten
Invalid read
im Valgrind-Ausgabe bedeutet, dasssqlite3SafetyCheckSickOrOk
rufen Sie verwies auf einige Speicher bereits freigegeben zuvor. Der genaue Aufruf-stack, wo es passiert ist, ist unten gedruckt. Das sieht etwas seltsam, denn es passiert insqlite3_close
die als bezieht sich auf freigegebenen Speicher. Wahrscheinlich ist das sqlite-Fehler.Zweiten
Invalid read
bedeutet bezogen auf NULL-Zeiger inCMdcevMM::loadXmlString
. Überprüfen Sie Ihren code.Invalid read
? Ich hatte darüber nachgedacht, bis jetzt, dass die Segmentierung Fehler und Speicherlecks sind ein und die gleichen! So die anderen Nachrichten sind nur Fehler, die Auswirkungen auf die Speichernutzung der Effizienz?Ja,
Invalid read
sind Kritischer Fehler. Andere Fehler sollte auch behoben werden, aber manchmal kann man Sie ignorieren, dies hängt von der genauen Fehlermeldung.Conditional jump or move depends on uninitialised value
können wahrscheinlich ignoriert, weil Sie Ihren Ursprung in libz, nicht in Ihrem code.InformationsquelleAutor ks1322