erreur C4703: potentiellement pointeur non initialisé la variable 'pNamesPtr' utilisé
Je suis en train de travailler sur un crypter de projet et a couru dans l'erreur suivante lorsque vous essayez de compiler le programme.
main.cpp(520): erreur C4703: potentiellement pointeur non initialisé
la variable 'pNamesPtr" utilisé
========== Génération: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
DLLNAMES[i].UsedAlready = 0;
}
*dwOutSize = (DWORD)pNamesPtr - (DWORD)pBuffer;//*<----is line 520 of error
*dwImportsSize = *dwOutSize - *dwIATSize;
return pBuffer;
}
#pragma pack(1)
typedef struct
Quelqu'un peut m'aider avec cette erreur? Avez-vous besoin de plus de code afin d'avoir une bonne réponse?
Il n'y a pas moyen de nous dire si vous avez initialisé ou non.
Comment vous avez déclaré
Comment vous avez déclaré
pNamesPtr
. Ajoutez le code pour le même..
OriginalL'auteur user3191413 | 2014-02-27
Vous devez vous connecter pour publier un commentaire.
Cet avertissement n'est pas toujours un bug, parfois, c'est juste le résultat d'une optimisation. Depuis qu'il est dans votre code et que vous ne savez pas ce qu'est ce qu'il pourrait en fait être un bug.
Par exemple, si j'écris:
Si vous êtes l'optimisation, alors vous savez peut-être que la valeur de
whatever
est toujours vrai lorsque la valeur dethis_and_that
est vrai donc siprintf
obtient alors appeléi
est déjà assurée d'être initialisé mais le compilateur ne peut souvent comprendre la relation entrethis_and_that
etwhatever
, c'est pourquoi vous obtenez le message d'avertissement. Une solution rapide à cet avertissement, c'est l'initialisation de la variable à une valeur par défaut à droite où vous déclarez. À mon avis, en épargnant à l'initialisation est une mauvaise pratique et une source d'un grand nombre de bugs.if-else if-else
genre de configuration, permettant de connaître la valeur d'une variable/indicateur sera réglé, puisque vous avez unelse
, mais depuis ils sont tous seuls, parfois appelé, le compilateur va probablement se plaindreoui, si l'on voulait généraliser ma déclaration: Cet avertissement se produit si vous essayez d'utiliser une variable qui n'est pas initialisé sur la possible exécution de code à voies entre l'initialisation d'une variable et d'utilisation variables. Donc aucun contrôle de l'état des flux qui génère un code avec "aller/goto" peuvent être en cause, par exemple
switch
pourrait faire la même chose mais beaucoup plus exotiques comme le flux de contrôle exemple:break
-ing hors d'une boucle peut en être la cause, si la initialzation de la variable est à l'intérieur de la boucle après votre instruction break...la correction de mon commentaire précédent: entre la variable déclaration et la variable d'utilisation
OriginalL'auteur pasztorpisti
Cela signifie que
pNamesPtr
lorsque vous le déclarer, de sorte qu'il commence avec une valeur non valide; etVérifier tous les chemins de code à partir de la déclaration jusqu'au point d'utilisation. Font-ils tous assigner quelque chose d'intelligent à la variable? Si non, faites en sorte qu'ils font.
S'ils le font, et vous êtes convaincu que vous êtes d'assigner correctement, pour vous simplifier le code de sorte qu'il est évident pour le compilateur que c'est?
Si tout le reste échoue, alors vous pourriez silence le compilateur par l'initialisation à
nullptr
ou une autre valeur par défaut dans l'initialisation. Mais seulement le faire si vous êtes vraiment sûr que votre code est correct, les compilateurs sont généralement bons pour repérer les erreurs de ce genre.OriginalL'auteur Mike Seymour
Mettre ceci dans votre code:
OriginalL'auteur chen zhiwei