2017-11-24 1 views
0

Ich versuche, Daten an das Ende der Liste einzufügen, aber es funktioniert nicht: eine Ausnahme tritt zur Laufzeit auf.Ich habe ein Problem mit der verknüpften Liste iam versucht hinzuzufügen, aber der debuger sagt, dass cant Zugriff auf den Speicher der Temp

struct gradeNode *newNode = (struct gradeNode*)malloc(sizeof(struct gradeNode)); 
assert(newNode != NULL); 

strcpy(newNode->courseName, courseName); // copying the course name 
newNode->next = NULL; 

struct gradeNode *temp = students[i].gradelist->head; // a temp 

// here is the problem: the debugger says ecxeption, can't access memory 
while (temp->next != NULL) 
{ 
    temp = temp->next; // I can't get to here 
    temp->next = newNode; 
} 
+2

[Bitte lesen Sie diese Diskussion, warum nicht den Rückgabewert von malloc() und Familie in C ..] werfen (https://stackoverflow.com/q/605845/2173917) –

+1

Ist 'Studenten [i]. Notenliste-> Kopf richtig initialisiert? Wann geschieht das? Ist 'temp' ein Null- oder sonst ein ungültiger Zeiger? Bitte versuchen Sie, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und zeigen Sie uns. Und bitte nehmen Sie sich etwas Zeit (lesen Sie, wie Sie gute Fragen stellen können) (http://stackoverflow.com/help/how-to-ask). –

+1

@loay Es scheint, dass Temp gleich NULL ist. –

Antwort

0

In diesem Codefragment

struct gradeNode *temp = students[i].gradelist->head;//a temp 
    while (temp->next != NULL)// 

entweder das Datenelement head nicht richtig initialisiert wird, oder wird auf NULL gleich ist. In beiden Fällen führt der Ausdruck temp->next zu undefiniertem Verhalten.

Und diese Schleife (nachdem Sie Ihren Code bearbeitet)

while (temp->next != NULL) 
{ 
    temp = temp->next; // I can't get to here 
    temp->next = newNode; 
} 

macht keinen Sinn. Es scheint, du meinst

while (temp->next != NULL) 
{ 
    temp = temp->next; // I can't get to here 
} 
temp->next = newNode; 

In jedem Fall ist der verwendete Ansatz falsch.

versuchen stattdessen folgende

struct gradeNode **temp = &students[i].gradelist->head;//a temp 
    while (*temp) temp = &(*temp)->next; 

    *temp = newNode; 

zu berücksichtigen, dass es logisch inkonsistent ist seitig ein zum Ende der Liste einfach verknüpften Liste eine haben und zu versuchen, Daten anzuhängen. Wenn Sie Daten an eine einfach verknüpfte Liste anhängen möchten, sollte die Liste als eine zweiseitig verknüpfte Liste definiert werden.

+0

iam sorry iam neu zu c so mein Code ist ein bisschen missy mein Code funktioniert auf Codeblocks, aber es funktioniert nicht auf Visualstudio das Problem ist hier '\t struct gradeNode * temp = Schüler [i] .gradenliste-> Kopf; \t \t \t während (temp-> nächste!= NULL) \t \t \t {'** Strukturstift { \t int id; \t float gradeAverage; \t float incomeAverage; \t struct gradeList * Notenliste; \t struct incomeList * incomelist; }; typedef struct Stud Studenten; struct gradeNode { \t char Kursname [20]; \t int Klasse; \t struct gradeNode * weiter; \t StrukturklasseNode * prev; }; ** – loay

+0

@loay Ich zeigte in meiner Antwort, wie die Funktion implementiert werden sollte. –

Verwandte Themen