【发布时间】:2017-09-06 02:01:29
【问题描述】:
所以我正在学习 C 中的数据结构,而二叉搜索树让我很难过,我运行 gdb 来查看 seg 错误在哪一行以及它在第 77 行(在代码中标记)。我似乎不明白为什么会这样,这是我的代码,提前致谢:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
typedef struct node{
int data;
struct node* left;
struct node* right;
} node;
node* getNewNode();
node* insert();
bool searchTree();
int getMin();
int main(int argc, char const *argv[]){
srand(time(NULL));
int random;
node* root;
int var;
printf("Genereting tree with random values...\n");//Adding random numbers
for(int i=1;i<15;i++){
random = rand();
insert(root, random);
printf("%d\n", random);
}
printf("Last value added: %d\n", random);
/*
printf("Enter number to search: \n");
scanf(" %d", &var);
printf("%s\n", searchTree(root, var) ? "true": "false");
*/
printf("min: %d\n", getMin(root)); //Printing min value
return 0;
}
node* getNewNode(int data){
node* newNode = (node*) malloc(sizeof(node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
node* insert(node* root, int data){
if(root == NULL){
root = getNewNode(data);
return root;
}
else if(data <= root->data){
root->left = insert(root->left, data);
}
else{
root->right = insert(root->right, data);
}
return root;
}
bool searchTree(node* root, int data){
if(root == NULL)
return false;
else if(root-> data == data)
return true;
else if(data <= root->data)
return searchTree(root->left, data);
else
return searchTree(root->right, data);
}
int getMin(node* root){
if(root->left == NULL){ //Here is where the error is
return root->data;
}
return getMin(root->left);
}
【问题讨论】:
-
root 本身是否为空? (只是猜测)
-
请阅读并遵循“How to Debug Small Programs”中的建议。您可能还会发现
valgrind很有帮助; bug 很可能不在 crash 发生的那一行。 -
还请注意,对于这样一个需要输入的程序,您需要在崩溃之前告诉我们确切您输入的内容,否则我们可能无法重现问题。
-
请说明
root的值在您的代码中的初始化位置 -
1)
node* root;-->node* root = NULL;2)insert(root, random);-->root = insert(root, random);
标签: c recursion segmentation-fault