2017-03-14 6 views
0

Ich möchte Daten an den Baum eingefügt werden mit dieser Funktion:Segmentation fault, binäre Suchbaum in c

struct treeNode{ 
    data* val; 
    struct treeNode *left, *right, *parent; 
}; 


void insert(data *d, struct treeNode **leaf, struct treeNode **leaf_par) 
{ 
    if(*leaf == 0) 
    { 
     *leaf = (struct treeNode*) malloc(sizeof(struct treeNode)); 
     (*leaf)->val = d; 
     /* initialize the children to null */ 
     (*leaf)->left = 0; 
     (*leaf)->right = 0; 
     /* initialize the parent */ 
     (*leaf)->parent = *leaf_par; //here I receive segmentation fault 
    } 
    else if(strcmp(d->name, (*leaf)->val->name) < 0) 
    { 
     insert(d, &(*leaf)->left, &(*leaf)); 
    } 
    else if(strcmp(d->name, (*leaf)->val->name) > 0) 
    { 
     insert(d, &(*leaf)->right, &(*leaf)); 
    } 
} 

Im Haupt ich habe:

struct treeNode *root = NULL; 
data d1 = {"Smith"}; 
insert(&d1, &root, NULL); 

Segmentation fault ist da:

(*leaf)->parent = *leaf_par; 

Zum ersten Mal * leaf_par ist NULL und ich weiß nicht, warum es nicht richtig läuft. Wie sollte ich meine Einfügefunktion reparieren? Ohne "Elternzeiger" ist es einfach, aber ich muss das mit "Eltern" machen und es funktioniert nicht.

+0

Offensichtlich übergeben Sie 'NULL' für' ** leaf_par', versuchen aber '* leaf_par' Zugriff, daher der Fehler. Was soll der Elternteil in diesem Fall sein? Sie müssen diesen Fall prüfen und entsprechend einstellen. – lurker

Antwort

-1

Sie versuchen, NULL zu dereferenzieren; Tu das nicht.

Eine einfache Lösung für Ihren ersten Einsatz ist:

insert(&d1, &root, &root); 

Deeper Einsätze in die Rekursion den Zeiger beheben.

+0

Es funktioniert jetzt, thx :) – Yakimget