Le saut ou le déplacement conditionnel d'erreur dépend de la valeur non initialisée

Le saut ou le déplacement conditionnel d'erreur dépend de la valeur non initialisée
Si vous vous préparez à l'examen en C ++, la plupart d'entre vous utiliseront Valgrind pour analyser vos contributions. Valgrind est un outil de vérification des erreurs lié au stockage. Un mythe répandu est que Valgrind identifie uniquement les fuites de mémoire et, par conséquent, vous ne devriez pas recevoir d'avertissements Valgrind lorsque vous n'utilisez pas de nouveau dans votre code. Valgrind peut découvrir une variété de problèmes de mémoire en plus des fuites, comme l'utilisation de la mémoire non signée ou les accès. De plus, lorsque vous n'utilisez pas de nouveau, vous pouvez divulguer le stockage si le code se termine incorrectement et ne serait pas en mesure d'effacer les objets de tas. Les erreurs non détectées ou l'utilisation de la méthode de quit. Les messages d'erreur de Valgrind peuvent être longs et intimidants. Ce message vous montrera comment et où gérer le «saut ou le déplacement conditionnel dépend de la valeur non initialisée» dans Ubuntu 20.04 tout en travaillant en c++.

Installez Valgrind dans Ubuntu 20.04:

Le package Valgrind peut mettre en évidence un avertissement ou une erreur sur le shell alors qu'il peut ne pas apparaître avec le compilateur C ++ sur le terminal Ubuntu. Par conséquent, nous devons l'installer d'abord. Vous devez donc ouvrir le terminal d'Ubuntu 20.04 avec la clé de raccourci «Ctrl + Alt + T». La commande de package APT d'Ubuntu est utilisée à cet effet jusqu'à présent dans le shell, comme indiqué ci-dessous.

$ sudo apt installer valgrind

Le code d'erreur peut être considéré comme «un saut ou un mouvement conditionnel dépend de la valeur non initialisée», ce qui indique que Valgrind a découvert que le résultat du programme dépend du stockage non signé. L'avis «Utilisation d'une valeur non initialisée de la taille n» peut également apparaître de temps en temps. Le point sur lequel le code repose sur la variable non signée sera signalé par Valgrind. Cela n'indiquera pas une erreur si des valeurs non initialisées sont déplacées et clonées dans le stockage jusqu'à ce que l'application ne s'appuie pas sur eux. Il est difficile de localiser le défaut car il pourrait être bien éloigné de la page Rapports de Valgrind. Vous pouvez obtenir de l'aide avec les commandes Valgrind en utilisant la commande d'aide et le mot-clé «Valgrind» pour les utiliser sur votre shell. La sortie de la commande d'aide s'ouvrira le manuel d'Ubuntu pour Valgrind, comme vous pouvez déjà le voir sur la photo ci-dessous. Dans vos commandes Valgrind, utilisez l'un de ces arguments.

$ valgrind - help

Exemple 01:

Ainsi, nous examinerons les exemples maximaux possibles qui peuvent amener le Valgrind à afficher cet erreur ou cet avertissement sur le terminal tout en utilisant la commande Valgrind. Nous avons donc créé un fichier pour le code C ++ à l'aide de l'instruction «Touch» Linux. Ce fichier nouvellement créé a été situé dans le dossier à domicile et ouvert dans l'éditeur Nano pour faire du code.

$ touch err.CC
$ nano err.CC

Par exemple, nous avons commencé le code avec iOStream et l'espace de noms de C++. Ceux-ci sont nécessaires pour faire fonctionner un code. Dans une fonction Main (), nous avons simplement déclaré une variable entière, et sur la ligne suivante, nous avons incrémenté la variable avec 3 sans l'initialiser. L'instruction COUT est utilisée pour afficher la valeur «x» variable d'incrément.

#inclure
Utilisation de Namespace Std;
int main()
int x;
x + = 3; // erreur
couter << x << endl;

Aucune erreur n'y a jusqu'à présent dans certaines situations comme ci-dessous sur l'exécution de ce code avec un simple compilateur G ++ de la langue C ++. Il affichera également la valeur incrémentée comme indiqué.

$ g ++ err.CC
$ ./un.dehors

D'un autre côté, Valgrind nous permet d'augmenter ou d'allouer X + 3 à «X» car les performances apparentes du programme ne sont pas modifiées jusqu'à ce que vous essayiez d'imprimer le contenu du vecteur. Valgrind ne vous montrera que le numéro de ligne sur lequel l'erreur de saut conditionnelle a été trouvée jusqu'à présent et vous fera comprendre que vous utilisez une variable non signée quelque part. Cependant, déterminer quelle variable non initialisée ou pourquoi elle n'a pas été initialisée peut nécessiter un travail médico-légal important.

$ valgrind -tool = memcheck -leak-check = oui ./se tromper.CC

Exemple 02:

Jetons un coup d'œil à un autre programme avec une façon différente d'obtenir la même erreur. Nous avons inclus l'espace de noms «STD» standard pour C ++ et l'iOStream via le «#include» dans ce programme. Nous avons commenté la déclaration de méthode principale () et déclaré une variable entière «x."La boucle" while "est utilisée pour vérifier une condition et effectuer la décrémentation.

#inclure
Utilisation de Namespace Std;
int main()
int x;
while (x> 4) // erreur
X--;
//

Il fera non seulement valgrind provoquer une erreur que «le saut ou le déplacement conditionnel dépend de la valeur non initialisée», mais entraînera également une erreur avec G ++, comme indiqué ci-dessous. Pour résoudre ce problème, vous devez décommenter la zone de code commentée et l'exécuter.

$ g ++ err.CC

Conclusion:

Il s'agissait de l'erreur Valgrind: «Le saut ou le déplacement conditionnel dépend de la valeur non initialisée» dans le code C ++. Nous avons maintenu la séquence en installant le valgrind, en ouvrant son manuel pour obtenir de l'aide, en créant un code C ++ et en l'exécutant avec G ++ et Valgrind sur le shell pour le comprendre mieux et le résoudre. Nous avons ajouté deux illustrations uniques pour une meilleure compréhension de cette erreur. Tous ces exemples sont mis en œuvre sur Ubuntu 20.04 Système. Cependant, vous pouvez également utiliser toute autre distribution. Nous pensons que ce sera vraiment bénéfique.