2016-03-21 22 views
0

Ich muss einen binären Suchbaum erstellen, indem ich in jeden Knoten Daten über Arzneimittel einfüge. Die Knoten von einem Zeichennamen sortiert werden .I've eine Fehlermeldung anzeigt, ist ein Segmentierungsfehler Fehler bei strcmp(name,(*parent)->name) < 0 .Hier der Code:C binärer Suchbaum Einfügung nach Zeichenelement

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
struct date 
{ 
    int dd,mm,yyyy; 
}; 
typedef struct node 
{ 
    char name[50]; 
    float price; 
    int amount; 
    struct date date_rel; 
    struct date date_exp; 
    struct node *left , *right; 
} node; 
node *insert_node(node **parent,char name[]) 
{ 
    node *current = NULL; 
    if(*parent == NULL) 
    { 
     current = (node *) malloc(sizeof(node)); 
     strcpy(current->name,name); 
     printf("\nPrice ="); 
     scanf("%f",&current->price); 
     printf("\nAmount ="); 
     scanf("%d",&current->amount); 
     printf("\nRelease date ="); 
     scanf("%d.%d.%d",&current->date_rel.dd,&current->date_rel.mm,&current->date_rel.yyyy); 
     printf("\nExpiration date ="); 
     scanf("%d.%d.%d",&current->date_exp.dd,&current->date_exp.mm,&current->date_exp.yyyy); 
     *parent = current; 
    } 
    else 
    { 
     if(strcmp(name,(*parent)->name) < 0) 
     { 
      (*parent)->left = insert_node(&(*parent)->left,name); 
     } 
     else 
     { 
      (*parent)->right = insert_node(&(*parent)->right,name); 
     } 
    } 
    return *parent; 
} 

int main() 
{ 
    node *root = NULL; 
    char name[50] ; 
    int total_prod; 
    printf("The total number of medicines is:"); 
    scanf("%d",&total_prod); 
    while(total_prod != 0) 
    { 
     printf("Name ="); 
     scanf("%s",name); 
     insert_node(&root,name); 
     total_prod--; 
    } 
    return 0; 
} 

Antwort

2

Wahrscheinlich ist es, weil Sie die left und right Zeiger nicht initialisieren, wenn *parent ist NULL. Da sie nicht initialisiert sind, haben sie einen unbestimmten Wert, und in Wirklichkeit wird es scheinbar zufällig und höchstwahrscheinlich nicht gleich NULL sein, was dazu führt, dass Sie sie als gültige Zeiger verwenden und undefined Verhalten haben und den Absturz bekommen .

Vor der *parent = current Zuordnung müssen Sie die left und right Zeiger von current-NULL zu initialisieren.

+0

Danke! Was für ein dummes Problem. Ich habe es nicht gesehen. –

Verwandte Themen