我不明白为什么我这么简单直接地在代码中出现分段错误,请帮忙。我一次又一次检查了代码,但我无法弄明白。 代码的重点是检查我是否可以编写Insert方法而不返回指向节点的指针。
#include<stdio.h>
#include<stdlib.h>
struct BSTNode
{
int data;
struct BSTNode *left;
struct BSTNode *right;
};
struct BST
{
struct BSTNode *root;
};
struct BST *CreateBST(void);
void Insert(struct BSTNode *root,int data);
int main(void)
{
struct BST *tree = CreateBST();
int a[6]= {0,1,2,3,4,5};
int i;
for(i=0;i<6;i++)
{
Insert(tree->root,a[i]);
}
return 0;
}
struct BST *CreateBST(void)
{
return NULL;
}
void Insert(struct BSTNode *root,int data)
{
if(root == NULL)
{
struct BSTNode *new_node = (struct BSTNode *) malloc (sizeof(struct BSTNode));
if(!new_node)
{
printf("Memory Error");
return;
}
new_node->data = data;
new_node->left = NULL;
new_node->right= NULL;
root = new_node;
}
else if(data<= root->data)
Insert(root->left,data);
else if(data>root->data)
Insert(root->right,data);
return;
}
答案 0 :(得分:3)
您调用返回CreateBST
的函数NULL
。然后,您尝试通过执行NULL
取消引用此tree->root
指针。这将导致undefined behavior和您的崩溃。
您的程序还存在其他问题,例如(如果您解决了上述问题),您将tree->root
按值传递给Insert
,这意味着Insert
函数root
是副本,更改副本不会更改原始文件。
答案 1 :(得分:-3)
当程序试图访问不具备其权限的内存区域时,会发生分段错误错误。尝试重新启动,这可能会修复错误。