2016-11-15 4 views
-1

Die Funktion, die ich benutze, um der Liste einen neuen Knoten hinzuzufügen, den Fehler "Segmentation fault (core dumped)" erhalten, habe ich das Gefühl, dass ich die Liste falsch referenziereProbleme beim Abrufen meiner verknüpften Liste

void add(Huff ** head, Huff * current, char x) 
{ 

int found = 0; 

zu überprüfen, ob die Liste leer ist, setzt neuen Knoten mit dem Hinterkopf

if(current == NULL) 
{ 
    Huff * newItem = malloc(sizeof(Huff)); 
    newItem->c = x; 
    newItem->freq = 1; 

    newItem->next = NULL; 
    *head = newItem; 

} 

zu überprüfen, ob die Knoten den gleichen Wert haben

else 
{ while(current != NULL) 
    { 
     if(current->c == x) 
     { 
      current->freq += 1; 
      found = 1; 
      break; 
     } 

    } 

, wenn sie in die Liste nicht, hinzufügen

if(found == 0) 
    { 
     Huff * newItem = malloc(sizeof(Huff)); 
     newItem->c = x; 
     newItem->freq = 1; 
     newItem->next = NULL; 


     current->next = newItem; 
    } 
} 

}

+0

Nun erklärt, haben Sie in den Debugger Schritt durch den Code? Welche Linie gibt den Fehler? Bitte zeige Definition von Huff. Wir sind keine Gedankenleser. – OldProgrammer

+1

Wenn 'x' nicht gefunden wird, wird die while-Schleife mit' current == NULL' beendet. Wie erwarten Sie, dass 'current-> next = newItem' ausgewertet wird? 'NULL-> next' verursacht Segmentierungsfehler. – alvits

+0

Oh, und Sie durchlaufen nicht die verkettete Liste in Ihrer 'while' Schleife. Aber ich vermute, es ist ein Copy-Paste-Problem. – alvits

Antwort

1

Nach dieser Schleife

else 
{ while(current != NULL) 
    { 
     if(current->c == x) 
     { 
      current->freq += 1; 
      found = 1; 
      break; 
     } 

    } 

current kann NULL in Fall gleich sein, wenn der entsprechende Knoten nicht gefunden wird.

Als Ergebnis in diesem Code-Schnipsel

if(found == 0) 
{ 
    Huff * newItem = malloc(sizeof(Huff)); 
    newItem->c = x; 
    newItem->freq = 1; 
    newItem->next = NULL; 

    current->next = newItem; 
    ^^^^^^^ 
} 

es Speicher mit den NULL Zeigern current zugegriffen wird.

Ich denke, die Funktion Schnittstelle vereinfachen könnte es wie

void add(Huff ** current, char x); 
Verwandte Themen