Je fais face à une erreur bizarre suivante.Erreur étrange lors de l'exécution d'un code C dans MSVC 2005
J'ai un espace de travail dans MSVS2005 de tout le code C. J'ai déclaré une variable globale dans un fichier C. (fichier1.c) Ce fichier a la fonction main() dans laquelle, j'initialise la valeur de cette variable = 0. Dans un autre fichier C (fichier2.c). De la main il y a un appel de fonction à une fonction (func1 dans file2.c) qui définit la valeur de cette variable globale à 1. Dans file2.c j'ai déclaré la variable globale comme "extern .." et y ai accédé. Mais ce que j'ai remarqué est que dans le moment de la fonction principale l'exécution du code entre dans la fonction func2, je vois dans la fenêtre de surveillance que l'adresse de cette variable globale est changée en une adresse totalement différente (Dans la fenêtre de surveillance). . Par conséquent, lorsque la valeur de cette variable est définie sur 1, elle écrit la valeur 1 sur une adresse mémoire tout à fait différente. Donc quand plus tard j'utiliserai cette variable pour vérifier une condition if (si variable == 1), elle montrera toujours la valeur de 0 et ne satisfera pas la condition if et ne prendra pas ce chemin de code, où il devrait avoir pris ce chemin. Solution: J'ai déclaré cette variable dans l'une de mes structures globales existantes, puis j'ai accédé à cette variable pour effectuer les mêmes opérations; le code fonctionne comme prévu.
Alors, quelle pourrait être l'explication de l'erreur qui provoque le changement de l'adresse de la variable globale si elle est déclarée comme globale dans un fichier C? Peu importe dans quel fichier * .c je le déclare et quel fichier j'y accède en utilisant "extern", le résultat est le même changement d'adresse de variable globale et l'opération errorneous suivante. Aucune option d'optimisation n'est activée.
Merci,
-AD
Il doit y avoir une erreur triviale. Voulez-vous s'il vous plaît rouler dans des extraits de code? – sharptooth
Je pense que votre question serait beaucoup plus facile à lire si vous n'essayez pas de décrire le code mais insérez directement les parties importantes ici. – schnaader