2017-07-26 1 views
1

Ich habe gerade angefangen, über Bäume in C zu lernen, und ich bekomme immer einen Segmentierungsfehler mit meinem Code. Der Code soll den Baum erstellen und dann die kleinsten und größten Werte in dem Baum zurückgeben. Ich habe den Code anderer Leute angeschaut und ich kann den Fehler nicht finden, den ich mache. Wenn jemand es entdecken kann, wird das sehr hilfreich sein.Segmentierungsfehler beim Erstellen eines binären Suchbaums in C

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct node{ 
    int data; 
    struct node* right; 
    struct node* left; 
}node; 

node* Insert(node* root, int data); 
int Min(node* root); 
int Max(node* root); 
node* GetNewNode(int data); 

int main(void){ 
    int min, max, data, x; 
    node* root = NULL; 
    printf("how many elements would you like to be in the tree\n"); 
    scanf("%i", &x); 
    for(int i = 0; i < x; i++){ 
     scanf("%i", &data); 
     root = Insert(root, data); 
    } 
    min = Min(root); 
    max = Max(root); 
    printf("the min value is %i, and the max value is %i\n", min, max); 

} 

node* Insert(node* root, int data){ 
    if(root == NULL){ 
     root = GetNewNode(data); 
    } 
    else if(data <= root->data){ 
     root->left = Insert(root->left, data); 
    } 
    else{ 
     root->right= Insert(root->right, data); 
    } 
    return root; 
} 

node* GetNewNode(int data){ 
    node* newNode = (node*)malloc(sizeof(node*)); 
    newNode->data = data; 
    newNode->left = newNode->right = NULL; 
    return newNode; 
} 

int Min(node* root){ 
    node* temp = root; 
    if(root->left == NULL){ 
     return root->data; 
    } 
    else{ 
     return Min(root->left); 
    } 
} 

int Max(node* root){ 
    node* temp = root; 
    if(root->right == NULL){ 
     return root->data; 
    } 
    else{ 
     return Max(root->right); 
    } 
} 
+1

'Knoten * newNode = (Knoten *) malloc (sizeof (Knoten *)) ; '->' node * newNode = (Knoten *) malloc (sizeof (Knoten)); 'oder' Knoten * newNode = malloc (sizeof (* newNode)); ' – BLUEPIXY

+0

Das ist ein guter Haken @BLUEPIXY. Mohammed Wäre schön, wenn Sie unter GDB ausführen und Backtrace überprüfen, gute Gelegenheit, Debugging zu lernen. –

Antwort

0

Änderung dieser Zeile:

node* newNode = (node*)malloc(sizeof(node*)); 

dazu:

node* newNode = (node*)malloc(sizeof(node)); 
0

Diese Zeile:

node* newNode = (node*)malloc(sizeof(node*)); 

Du Zuteilung sizeof(node *) Bytes, die tatsächlich die Größe eines Zeigers für Sie System. Was Sie wollen, ist genug Speicher zu reservieren, um die Struktur selbst und kein Zeiger darauf zu halten. So etwas wie dies funktioniert:

node* newNode = (node*)malloc(sizeof(node) * sizeof(char)); 
Verwandte Themen