2016-07-21 32 views
0

Ich habe eine ausführbare Datei, die ich auf einem Remote-Linux-Computer ausgeführt werde.Programmausgabe unterscheidet sich dramatisch unter Valgrind

Wenn ich die ausführbare Datei normalerweise (./execute arg_one), stürzt das Programm in der Mitte einer while-Schleife laufen "Fehler in` ./execute ': malloc(): Speicherbeschädigung (schnell)"

Wenn ich das Programm jedoch unter dem einfachsten valgrind (valgrind ./execute arg_one) ausführe, stürzt das Programm nicht ab, läuft den ganzen Weg durch main und produziert tatsächlich die korrekte Ausgabe.

Warum wäre das der Fall?

+0

Ich weiß es nicht, aber Sie könnten 'MALLOC_CHECK_ = 2 ./execute arg_one' auch versuchen. – melpomene

+0

Wie läuft Valgrind? Es könnte die Ausgabe "* correct *" erzeugen, deshalb heißt es UNDEFINED BEHAVIOR. –

+0

Verwenden Sie 'valgrind --leak-check = full --track-origins = yes ./execute arg_one' und überprüfen Sie die Fehler dort. Ihr Programm muss etwas tun, das Valgrind verpissen wird. –

Antwort

1

Manchmal passiert es, dass Ihr Programm abstürzt, aber da Valgrind es sehr langsam ausführt, ist es möglich, dass Valgrind es bis zum Ende und mit der korrekten Ausgabe ausführt. Aber das bedeutet nicht, dass Ihr Programm korrekt ist. Sie sollten die Fehler/Kontexte überprüfen, die von Valgrind angezeigt werden, und sie korrigieren, wenn Sie möchten, dass Ihr Programm funktioniert.