Je suis en cours d'exécution dans une boucle infinie et je ne sais pas pourquoi. J'ai essayé de faire debugggan mon code sans succès. Peut-être que quelqu'un peut m'aider à résoudre ce problème. Il boucle dans la partie insert_list. Après avoir été appelé de la lecture_data. Il ne boucle également que lorsque la fonction est appelée la dernière fois. P> asdfgh 31554
snoopy1 15637
qwertyuiop 24372
3 Réponses :
Eh bien c'est faux
char password[index+1];
Malheureusement, je suis toujours en boucle même avec cela.
Oui, mais vous devez d'abord corriger une telle erreur afin que quelqu'un puisse trouver votre bogue. Avez-vous essayé un débogueur?
La fonction read_data a au moins trois bugs graves.
Tout d'abord, vous devez vérifier si le fichier était ouvert avec succès. p>
Deuxièmement, vous écrivez au-delà du mot de passe de tableau à l'aide de l'index dans cette instruction p> de sorte que le programme dans tout cas a un comportement non défini. P> la fonction ne libère pas la mémoire allouée. p> Vous avez également une erreur logique dans la conception de votre liste. Si vous avez une liste liée à TWP-Silaté, la fonction Index code> parce que vous n'avez pas réservé de mémoire dans le tableau pour la terminaison zéro. p>
le-> mot de passe code>. P>
free_list code> p>
insertion_list code> doit ajouter un nouveau nœud à la queue de la liste. Sinon, il n'y a pas de sens idéal pour avoir le nœud queue pour une liste liée. P> p>
Donc, dans ma compréhension, la liste Free_List devrait ressembler à ceci: `` `Void free_list (liste * myList) {list_element * TMP = myList-> Premier; tandis que (TMP-> Suivant! = NULL) {GRATUIT (myList-> premier-> Mot de passe); libre (myList-> premier); TMP = TMP-> Suivant; } libre (myiste); } `` `
et la déclaration de mot de passe comme ceci: le-> mot de passe = malloc (taille de (char) * (Strlen (mot de passe) +1)); Strncpy (Le-> Mot de passe, mot de passe, (Strlen (mot de passe) +1));
Voici un problème. Regardez de plus près de votre fonction free_list.
void free_list(list* mylist) { list_element* tmp = mylist->first; while(tmp->next != NULL) { free(mylist->first->password); free(mylist->first); tmp = tmp->next; } free(mylist); }
En fait, vous ne l'avez pas réparais. Vous devez définir TMP = TMP-> Suivant avant i> Vous faites la liberté.