Heim > Backend-Entwicklung > C++ > Hauptteil

Warum meldet Valgrind „Bedingter Sprung oder Verschiebung hängt von nicht initialisierten Werten ab' und wie kann ich seinen Ursprung verfolgen?

Patricia Arquette
Freigeben: 2024-11-01 10:27:30
Original
905 Leute haben es durchsucht

Why Does Valgrind Report

Auffinden der Valgrind-Nachricht „Bedingter Sprung oder bedingte Bewegung hängt von nicht initialisierten Werten ab“

Valgrinds rätselhafter „bedingter Sprung oder bedingte Bewegung hängt von nicht initialisierten Werten ab“. „Wert(e)“-Nachricht kann ein rätselhaftes Rätsel sein. Es identifiziert zwar den Punkt, an dem ein nicht initialisierter Wert verwendet wird, verrät jedoch nicht seinen Ursprung.

Um dieses Problem zu lösen, können Sie die Valgrind-Option --track-origins=yes nutzen. Dies ermöglicht es Valgrind, die Entstehung nicht initialisierter Werte zu verfolgen, geht jedoch mit einer erhöhten Speichernutzung und Ausführungszeit einher.

Das Berichtsverhalten verstehen

Das ist unbedingt zu beachten Valgrind meldet nicht initialisierte Werte nicht sofort bei ihrer ersten Verwendung. Stattdessen wird gewartet, bis die Daten auf eine Weise verwendet werden, die möglicherweise das beobachtbare Verhalten des Programms beeinflussen könnte. Dies wird im Valgrind-Handbuch erklärt:

Es ist wichtig zu verstehen, dass Ihr Programm Junk-Daten (nicht initialisierte Daten) so oft kopieren kann, wie es möchte. Memcheck beobachtet dies und verfolgt die Daten, beschwert sich aber nicht. Eine Beschwerde wird nur ausgegeben, wenn Ihr Programm versucht, nicht initialisierte Daten in einer Weise zu nutzen, die sich auf das von außen sichtbare Verhalten Ihres Programms auswirken könnte.

Zusätzliche Erkenntnisse von Valgrind

Die Valgrind-FAQ stellt weiter klar:

Was die eifrige Meldung von Kopien nicht initialisierter Speicherwerte betrifft, wurde dies vorgeschlagen mehrfach. Leider kopieren fast alle Programme legitimerweise nicht initialisierte Speicherwerte herum (da Compiler Strukturen auffüllen, um die Ausrichtung beizubehalten), und eine sorgfältige Überprüfung führt zu Hunderten von Fehlalarmen. Daher unterstützt Memcheck derzeit kein Eager Checking.

Das obige ist der detaillierte Inhalt vonWarum meldet Valgrind „Bedingter Sprung oder Verschiebung hängt von nicht initialisierten Werten ab' und wie kann ich seinen Ursprung verfolgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!