2010-12-09 13 views
1

Das Problem ist auf While-Schleife. Ich konnte nicht finden, was falsch ist.Unendliche Schleife beim Auflisten der verketteten Liste

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

typedef struct node { 
     int data; 
     node *next; 
     }; 

int main(){ 
node * root= (node *) malloc(sizeof(node)); 
node * temp = root; 
for(int i=0;i<10;i++){ 
     temp->data=i*10; 
     temp->next=(node *) malloc(sizeof(node)); 
     temp=temp->next; 
     }  
temp =root; 
while(temp){ //infinite loop 
     printf("\n%d",temp->data); 
     temp=temp->next;  
     } 
     getch(); 
    return 0; 
}  
+2

Unendlich Schleife oder hängt es? (Ich nehme an, letzteres) - deine letzte Temp-> nächste ist undefiniert und schickt dein Programm wahrscheinlich in die Twilight-Zone –

+4

Bin ich der Einzige, der ** die Idee einer "Infinitiv-Schleife" liebt? –

Antwort

5

Sie nie die letzten Knoten neben null gesetzt. Setzen Sie
temp->next = NULL;
nach der for-Schleife.

Wenn Sie Knoten mit malloc zuweisen, werden die Werte zu nichts initialisiert. So zeigt next auf einen zufälligen Platz im Speicher.

2

Sie fehlen wahrscheinlich diese letzte Zeile in der Liste Gebäude-Schleife:

/* ... */ 
    temp->next = NULL; 
} 
1

Wenn Sie den letzten Knoten zuweisen, setzen Sie nie seinen next Zeiger. Da es nicht initialisiert ist, enthält es alle Daten, die sich bereits in diesem Speicherort befanden, was höchstwahrscheinlich nicht NULL ist. Nachdem Sie alle Knoten in der Schleife while verarbeitet haben, wird Ihr Programm diesen nicht initialisierten Zeiger dereferenzieren und undefiniertes Verhalten aufrufen.

0

Sind Sie sicher, dass Sie C kompilieren?

In der For-Schleife initialisieren Sie den Zeiger next auf NULL.

for (int i = 0; i < 10; i++) { 
    /* ... */ 
    temp->next = malloc(sizeof (node)); 
    assert(temp->next && "no memory"); /* easy test of malloc return value */ 
    temp->next->next = NULL; 
    /* ... */ 
} 
+0

In oder nach der for-Schleife? – Mauricio

+0

In der Schleife. Gleich nach dem Test für malloc. Die 3 Zeilen oben sollten alle zusammen bleiben. – pmg

0

Dies liegt daran, while (temp) enthält immer einen Wert. Stellen Sie sicher, dass Ihr letzter Knoten auf einen Nullwert zeigt, sodass temp=temp->next; NULL zurückgibt und die Schleife beendet.

Verwandte Themen