2012-12-02 3 views
0

По какой-то причине, когда я обращаюсь к любым данным в своей таблице, содержимое заменяется на null. Таблица представляет собой массив связанных списков.Стол, удаляемый после обхода

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

Ничего не пытаюсь работать. Таблица печатает один раз, а затем возвращает null второй раз.

+2

'помощник [я] = хелперы [я] -> следующий;' Уничтожает/модифицирует таблицу во время печати. – wildplasser

+0

@wildplasser Что следует использовать вместо этого? –

+0

Возможно, временная переменная? –

ответ

2

Ну, вы измените массив с

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

установив его в конце концов к NULL. Итак, ваша проблема не удивительна.

Если вы хотите, чтобы петли через хэш-таблицу, попробуйте

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

Это трюк, спасибо! –

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"); 
} 
Смежные вопросы