简体   繁体   中英

A binary search tree with segfault

Here I want to make some text sorting with a BST structure, so I first do some text first. But I get segfault again. So sad about it:

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

typedef struct BSTnode{
    struct BSTnode* leftchild;
    struct BSTnode* rightchild;
    char data[20];
}BSTnode;

void prompt();
void inputData();

BSTnode firstNode;
BSTnode* MyNode=&firstNode;     //maybe there is some better way to initialize the first node

int main()
{
    //MyNode=malloc(sizeof(BSTnode));   /* initialize the first node*/ 
    MyNode->leftchild=NULL;              
    MyNode->rightchild=NULL;
    strcpy(MyNode->data,"");    
    while(1)
        prompt();                 //always prompt the user for input
                                  //and then use the function to store that 
                                  //input in that binary tree

    return 0;
}

void prompt(){
    int i=0;     
    printf("Please select:\n");
    printf("1.input a data\n2.Exit\n");

    scanf("%d",&i);
    switch(i){
        case 1:
            inputData();
            break;
        case 2:
            exit(0);
        default:
            printf("Please input a valid number!(1 or 2)");
    }
 }

void inputData(){
    char* data="";
    printf("Input your data here(character only / less than 19 characters!): ");
    scanf("%s",data);
    BSTnode** ptr=&MyNode;
    while(1){
        if(strcmp(data,(*ptr)->data)){
            if((*ptr)->rightchild!=NULL){
                ptr=&((*ptr)->rightchild);
                continue;
            }
            else{
                (*ptr)->rightchild=malloc(sizeof(BSTnode));
                ptr=&((*ptr)->rightchild);
                (*ptr)->rightchild=NULL;
                (*ptr)->leftchild=NULL;
                strcpy((*ptr)->data,data);
                break;
            }
        }

        else{
            if((*ptr)->leftchild!=NULL){
                ptr=&((*ptr)->leftchild);
                continue;
            }
            else{
                (*ptr)->leftchild=malloc(sizeof(BSTnode));
                ptr=&((*ptr)->leftchild);
                (*ptr)->leftchild=NULL;
                (*ptr)->rightchild=NULL;
                strcpy((*ptr)->data,data);
                break;
            }
        }  
    }

    printf(" Your data have been input successfully!\n");
    return;
}

That is all the code. And I get segfault once I input a word and press return. I don't even try to print the data out. What I want to do now is input some data and store it in a binary search tree.

But, I not skillful enough... Actually I haven't make a successful BST structure. So I would really appreciate it if you can help debug. Of cource, any other related information and code would also be appreciated.

Your data pointer in inputData is pointing to a constant (and that maybe initialized somewhere in the heap), you shouldn't do that.

You need to initialize memory with malloc or, use a fixed-size array, f. ex.

void inputData(){
    char data[100];
    memset(data,0,sizeof(data));
    printf("Input your data here(character only / less than 19 characters!): ");
    scanf("%s",data);
    BSTnode** ptr=&MyNode;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM