0
votes

Courir dans une boucle infinie c

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. XXX PRE>

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


0 commentaires

3 Réponses :


3
votes

Eh bien c'est faux

char password[index+1];


2 commentaires

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?



3
votes

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.

Deuxièmement, vous écrivez au-delà du mot de passe de tableau à l'aide de l'index Index parce que vous n'avez pas réservé de mémoire dans le tableau pour la terminaison zéro. xxx

dans cette instruction xxx < P> Tous les éléments de la liste sont attribués à un pointeur à un tableau local qui ne sera pas vivant après la sortie de la fonction. Vous devez allouer une mémoire dynamique pour chaque membre de données le-> mot de passe .

de sorte que le programme dans tout cas a un comportement non défini.

la fonction free_list xxx

ne libère pas la mémoire allouée.

Vous avez également une erreur logique dans la conception de votre liste. Si vous avez une liste liée à TWP-Silaté, la fonction insertion_list 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.


2 commentaires

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));



1
votes

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);
}


1 commentaires

En fait, vous ne l'avez pas réparais. Vous devez définir TMP = TMP-> Suivant avant Vous faites la liberté.