Fehlerbedingter Sprung oder Bewegung hängt vom nicht initialisierten Wert ab

Fehlerbedingter Sprung oder Bewegung hängt vom nicht initialisierten Wert ab
Wenn Sie sich auf die Prüfung in C ++ vorbereiten, werden die meisten von Ihnen Valgrind verwenden, um Ihre Beiträge zu analysieren. Valgrind ist ein speicherbezogenes Fehlerprüfwerkzeug. Ein weit verbreiteter Mythos ist, dass Valgrind ausschließlich Speicherlecks identifiziert und Sie daher keine Valgrind -Warnungen erhalten sollten, wenn Sie nicht Neu in Ihrem Code verwenden. Valgrind kann neben Lecks eine Vielzahl von Speicherproblemen entdecken, wie z. Wenn Sie nicht neu verwenden, können Sie den Speicher austreten, wenn der Code falsch endet und Heap -Objekte nicht löschen können. Unbekannte Fehler oder die Verwendung der Quit -Methode (die nicht in C ++ Castoff ausgeht) könnte zu einem unangemessenen Ausgang führen. Fehlermeldungen von Valgrind können langwierig und entmutigend sein. In diesem Beitrag wird angezeigt, wie und wo das Problem „Bedingter Sprung oder Umzug in Ubuntu 20.04 während der Arbeit in C++.

Installieren Sie Valgrind in Ubuntu 20.04:

Das Valgrind -Paket kann eine Warnung oder einen Fehler in der Schale hervorheben, während es möglicherweise nicht mit dem C ++ - Compiler am Ubuntu -Terminal angezeigt wird. Daher müssen wir es zuerst installieren. Sie müssen also das Terminal von Ubuntu 20 öffnen.04 mit der Abkürzung "Strg+Alt+T". Der Befehl APT -Paket des Ubuntu wird zu diesem Zweck bisher in der Shell verwendet, wie unten gezeigt.

$ sudo Apt installieren Sie Valgrind

Der Fehlercode kann als „bedingter Sprung oder Umzug von den nicht initialisierten Wert (en) abhängt“, was angibt. Die Bekanntmachung „Verwendung eines nicht initialisierten Wertes von Größe n“ kann auch gelegentlich erscheinen. Der Punkt, über den der Code auf der nicht signierten Variablen beruht, wird von Valgrind gemeldet. Dies zeigt keinen Fehler an. Es ist schwierig, den Fehler zu lokalisieren, da er möglicherweise von der Seite, die Valgrind berichtet. Sie können Hilfe bei Valgrind -Befehlen mit dem Befehl help und dem Schlüsselwort „Valgrind“ erhalten, um sie auf Ihrer Shell zu verwenden. Die Ausgabe für den Befehl helf wird ubuntus Handbuch für Valgrind geöffnet, wie Sie bereits auf dem beigefügten Foto unten sehen können. Verwenden Sie in Ihren Valgrind -Befehlen eines dieser Argumente.

$ valgrind -HELP

Beispiel 01:

Wir werden uns also die maximal möglichen Beispiele ansehen, die dazu führen können, dass der Valgrind diesen Fehler oder diese Warnung am Terminal zeigt, während der Befehl Valgrind verwendet wird. Daher haben wir eine Datei für C ++ - Code mit der Linux "Touch" -Bemerkung erstellt. Diese neu erstellte Datei befand sich im Home -Ordner und wurde innerhalb des Nano -Editors geöffnet, um Code zu machen.

$ touch err.CC
$ nano err.CC

Zum Beispiel haben wir den Code mit iostream und dem Namespace von C begonnen++. Diese sind notwendig, damit ein Code funktioniert. In einer Main () -Funktion haben wir einfach eine Ganzzahlvariable deklariert und in der nächsten Zeile die Variable mit 3 erhöht, ohne sie zu initialisieren. Die Cout -Anweisung wird verwendet, um den Wert der Inkrementvariablen „X“ anzuzeigen.

#enthalten
Verwenden von Namespace STD;
int main ()
int x;
x += 3; // Fehler
Cout << x << endl;

Bisher gibt es in einigen Situationen, wie unten bei der Ausführung dieses Code. Es wird auch den inkrementierten Wert wie gezeigt angezeigt.

$ g ++ err.CC
$ ./A.aus

Andererseits erlaubt Valgrind es uns, X+3 zu erhöhen oder zu „X“ zuzuweisen, da die scheinbare Leistung des Programms nicht geändert wird, wenn Sie versuchen, den Inhalt des Vektors zu drucken. Valgrind zeigt Ihnen nur die Zeilennummer an, auf der der bedingte Sprungfehler bisher gefunden wurde und Sie verstehen, dass Sie irgendwo eine nicht signierte Variable verwenden. Die Bestimmung der nicht initialisierten Variablen oder warum sie nicht initialisiert wurde.

$ valgrind -tool = memcheck -Leak -Check = Ja ./irren.CC

Beispiel 02:

Schauen wir uns ein anderes Programm mit einer anderen Möglichkeit an, um den gleichen Fehler zu erhalten. Wir haben den Standard -Namespace für C ++ und den iOstream über das „#include“ in diesem Programm aufgenommen. Wir haben die main () -Methode deklaration kommentiert und eine Ganzzahlvariable „x deklariert.”Die Schleife" while "wird verwendet, um einen Zustand zu überprüfen und die Abnahme durchzuführen.

#enthalten
Verwenden von Namespace STD;
int main ()
int x;
while (x> 4) // Fehler
X--;
//

Es wird nicht nur dazu führen, dass Valgrind den Fehler „bedingter Sprung oder Umzug abhängt, auch von nicht initialisiertem Wert“, sondern führt auch zu einem Fehler mit G ++, wie unten gezeigt. Um dieses Problem zu beheben, müssen Sie den kommentierten Codebereich überzeugen und ausführen.

$ g ++ err.CC

Abschluss:

Hier ging es um den VaLgrind -Fehler: „Bedingter Sprung oder Bewegung hängt vom nicht initialisierten Wert in C ++ - Code ab. Wir haben die Sequenz beibehalten, indem wir das Valgrind installiert, ihr Handbuch für Hilfe geöffnet, ein C ++ - Code erstellt und mit G ++ und Valgrind auf der Shell ausgeführt werden, um alles besser zu verstehen und sie zu lösen. Wir haben zwei einzigartige Abbildungen hinzugefügt, um diesen Fehler besser zu verstehen. Alle diese Beispiele werden auf Ubuntu 20 implementiert.04 System. Sie können jedoch auch jede andere Verteilung nutzen. Wir glauben, dass es wirklich vorteilhaft sein wird.