2016-03-21 31 views
0

Farmasötik ilaçla ilgili her düğüm verilerine ekleyerek bir ikili arama ağacı oluşturmam gerekiyor. düğümleri .Ben bir hata var bir karakter ADI göre sıralanır, strcmp(name,(*parent)->name) < 0 .Here bir segmentasyon hatası hata kodudur: ne zaman left ve right işaretçiler başlatılamadı çünküC char öğesine göre ikili arama ağacı ekleme

#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; 
} 

cevap

2

Büyük olasılıkla bu kadar *parent, NULL. Başlatılmamış oldukları için, belirsiz değerine sahip olacaklar ve gerçekte rastgele görünecek ve büyük olasılıkla NULL'a eşit olmayacak ve bunları geçerli bir işaretçi olarak kullanmanıza neden olacak ve tanımsız davranışı olacak ve kazayı alacaksınız .

*parent = current atama önce NULL için current arasında left ve right işaretçiler başlatmak gerekiyor.

+0

Teşekkürler! Ne aptal bir problem. Ben onu görmedim. –