Ich habe ein Problem mit dem Schreiben von BST in C. Ich bekomme immer einen Segmentierungsfehler Fehler. Ich glaube, dass das Problem von der Funktion insertNode herrührt. Ich fügte printf() Anweisungen in der Funktion und direkt nach dem Funktionsaufruf hinzu, um zu sehen, ob der newNode hinzugefügt wurde. Bitte ignorieren Sie den Rest des Codes, da er noch nicht fertig ist. Versuchen Sie nur, die insertNode-Funktion zu aktivieren.Binäre Suchbaum in C, Segmentierung Fehler Fehler
#include <stdio.h>
#include <stdlib.h>
//structure for node
struct btNode {
int data;
struct btNode *left;
struct btNode *right;
};
//prototypes
struct btNode* createNode(int x);
void insertNode(struct btNode *tree, struct btNode *root);
int main(){
int x,n=-1,i=0; //local variables
struct btNode *head=NULL;
while (n <= 0){
printf("Enter the number of nodes in the Tree(>0): ");
scanf("%i", &n);
}
while(i < n){
printf("Enter an integer: ");
scanf("%i", &x);
struct btNode *newNode=createNode(x);
insertNode(head,newNode);
printf("%d",head->data); //breaks program here????
i++;
}
while (x < 0){
printf("Enter a integer from 0-5: ");
scanf("%i",&x);
if (x == 0){
printf("Program Exit.\n");
exit(0);
}else if(x==1){
}else if(x==2){
}else if(x==3){
}else if (x==4){
}else if(x==5){
}
x=-1;
}
return 0;
}
//creates and returns a pointer to a new node
struct btNode* createNode(int x)
{
struct btNode *newNode;
newNode=(struct btNode*)malloc(sizeof(struct btNode));
if (newNode == NULL){
printf("Memory Allocation Failed./n");
exit(20);
}else{
newNode->data=x;
newNode->left=NULL;
newNode->right=NULL;
return newNode;
}
}
void insertNode(struct btNode *tree, struct btNode *newNode){
if (tree==NULL){
tree=newNode;
printf("%d",tree->data); //works fine here!
}else if(tree->data <= newNode->data){
insertNode(tree->right, newNode);
}else if(tree->data > newNode->data){
insertNode(tree->left, newNode);
}
}
Sie sollten den Rückgabewert von 'Scanf testen()'; Ihr Programm wird nicht aufhören, wenn es EOF - oder eine Nicht-Ziffer (z. B. "a") - in der ersten Schleife bekommt. Testen Sie immer das Ergebnis von 'scanf()' usw. Wenn Sie einen Wert erwarten, testen Sie, dass es '1' zurückgibt; es könnte "0" zurückgeben (was anzeigt, dass keine Eingabe erfolgte) oder "EOF". –
Diese Frage ist effektiv ein Duplikat von vielen anderen - Listen und Bäume laufen beide in das grundlegende Problem von "Wie bekomme ich die Informationen zurück zum aufrufenden Code". –