2011-12-14 1 views
0

Récemment, j'ai vécu une situation très étrange avec mon programme C. Habituellement mon programme fonctionne bien, mais si j'ajoute juste quelques lignes pour vérifier le temps écoulé, le résultat change.C Programmation Le résultat du programme est modifié par la fonction time (& start) de <time.h>

Le code dont le résultat modifié est:

while (!feof(pfInputFile) && (c = fgetc(pfInputFile)) != EOF){ 
    for(i = 1 ; i < SEED_SIZE ; i++){ 
    pcSeq[i-1] = pcSeq[i]; // Shift left all sequence 
    } 
    pcSeq[SEED_SIZE - 1] = c; 
} 

Et le code que j'ajouté et la cause d'un problème est ci-dessous:

#include <time.h> 

time_t start, end; 
time(&start); time(&end); 

Et puis, les personnages qui sont lus par la source ci-dessus le code est changé en caractère non reconnu.

+1

Vous devriez apprendre à utiliser un débogueur (comme 'gdb' sous Linux); vous devriez compiler avec les informations d'avertissement et de débogage activées (c'est-à-dire 'gcc -Wall -g' sous Linux); et vous devriez poster tout votre code (le bug est probablement ailleurs) si vous voulez que nous vous aidions. –

+2

si rien d'autre l'appel 'feof' est inutile; Vérifiez seulement le '((c = getchar()) == EOF)' – Dave

+3

Puisque vous ne montrez pas le code minimal complet qui reproduit le problème, nous ne pouvons rien faire sauf deviner. En particulier, vous ne montrez pas comment 'pcSeq' est défini ou comment il est initialisé. Vous pourriez bien trouver qu'appeler 'printf (" Hello World \ n ");' au lieu de 'time()' change aussi la sortie. –

Répondre

2

Pas assez de détails, mais je vais faire une conjecture.

Vous avez renvoyé un pointeur sur une variable locale pcSeq. Ensuite, dans une autre fonction vous appelez time(&start) avec le résultat que la variable start partage maintenant la même adresse de pile que pcSeq avait, de sorte qu'il a été écrasé.

Questions connexes