2012-12-02 3 views
0

Pour une raison quelconque, chaque fois que j'accède à des données de ma table, le contenu est remplacé par null. La table est un tableau de listes liées.Tableau en cours de suppression après la traversée

void print(struct foo ** bar) { 
    struct foo ** helper = bar; 
    for (i = 0; i < size; i++) { 
     printf("%d: ", i); 
     while (helper[i] != NULL) { 
      printf("%s ", helper[i]->data); 
      helper[i] = helper[i]->next; 
     } 
     printf("\n"); 
    } 
    printf("\n"); 
} 

Rien que j'essaie. La table s'imprime une fois, puis renvoie null la deuxième fois.

+2

'aide [i] = aide [i] -> suivant;' destructs/modifie la table lors de l'impression. – wildplasser

+0

@wildplasser Que dois-je utiliser à la place? –

+0

Une variable temporaire, peut-être? –

Répondre

2

Eh bien, vous modifiez votre tableau avec

helper[i] = helper[i]->next; 

le mettre finalement à NULL. Donc, votre problème n'est pas une surprise.

Si vous voulez faire une boucle à travers votre table de hachage, essayez

struct foo *helper; 
for (i = 0; i < tablesize; i++) { 
    printf("%d: ", i); 
    for (helper = bar[i]; helper != NULL; helper = helper->next) 
     printf("%s ", helper->data); 

    printf("\n"); 
} 
+0

Cela a fait l'affaire, merci! –

1
void print(struct foo ** bar) { 

    int i; 
    struct foo *ptr ; 

    for (i = 0; i < tablesize; i++) { 
     if (!bar[i]) continue; 
     printf("%d: ", i); 

     for (ptr=bar[i] ; ptr ; ptr = ptr->next) { 
      printf("%s ", ptr->data); 
     } 

     printf("\n"); 
    } 
    printf("\n"); 
} 
Questions connexes