Segmentation Fault, jedoch bei gdb oder valgrind nicht



  • Hi,
    ich habe ein Programm geschrieben (ist größer, macht kein Sinn es hier zu posten). Das wenn ich es ausführe an der gleichen Stelle bei der Iteration über Daten ein Segmentation Fault wirft und sich beendet.
    Führe ich es jedoch mit gdb oder valgrind aus läuft es ohne Probleme durch.

    Woran kann das liegen? Bin mir eigentlich ziemlich sicher, dass ich auf den richtigen allozierten Speicher schreibe.
    Könnte der Stack voll sein (ist rekursive Funktion)? Wirft es da ein Seg-Fault.

    Oder eine andere Idee woran das liegen könnte. Oder wie man das beheben könnte. Oder genauer rausfinden kann woran es liegt.



  • Ok, obwohl ich nix verändert habe, geht es heute auch manchmal bei gdb nicht. Die Stelle(index) ist jetzt auch nicht immer die gleiche.



  • Das klingt nach "undefined behaviour". Ohne Code zu sehen, kann man dazu nix sagen.

    Höchstwahrscheinlich hast du den Speicher über den du iterierst nicht richtig initialisiert.



  • Probeire mal -D_GLIBCXX_DEBUG als Compilerargument.



  • Benutze AddressSanitizer ( -fsanitize=address ) und am besten auch gleich UBSan mit dazu ( -fsanitize=address,undefined ). Damit findest du auch Fehler, die z.B. bei valgrind bzw. bei einem Debugbuild durchs Raster fallen. Die Performance ist auch deutlich besser als bei valgrind, eignet sich daher auch für Anwendungen, die Daten in Echtzeit verarbeitet müssen, sowie für interaktive Anwendungen.



  • Mit -D_GLIBCXX_DEBUG kommt auch nach mehrfachen Versuchen kein Seg-Fault weder mit gdb noch ohne.



  • Eine Funktion scheint auf das .end() Elemenet eines Vektors zuzugreifen, obwohl sie das eigentlich nicht sollte (std:: function)


  • Mod

    B.Nutzer schrieb:

    Eine Funktion scheint auf das .end() Elemenet eines Vektors zuzugreifen, obwohl sie das eigentlich nicht sollte (std:: function)

    Das macht sie bestimmt nicht aus böser Absicht, sondern weil du es ihr so sagst.

    Schlangenmensch schrieb:

    Ohne Code zu sehen, kann man dazu nix sagen.

    QFT.


Anmelden zum Antworten