BST 中的分段错误(核心已转储)

Segmentation fault (core dumped) in BST

我已经检查了数百万次代码,但是这个错误不会出现,请帮助,它是用于创建二叉搜索树的程序... 我正在使用 VS Code 进行编译

  typedef struct node node;
node *newNode(int key){
    node *temp=(node *)malloc(sizeof(node));
    temp->info=key;
    temp->left=temp->right=NULL;
    return temp; }
void inorder(node *root){
    if(root!=NULL){
        inorder(root->left);
        printf("%d\t",root->info);
        inorder(root->right); } }

node *Insert(node *root,int key){
    if(root=NULL){ return newNode(key);}
    if(key<root->info){    
       root->left = Insert(root->left,key); }
    else if(key>root->info){    
       root->right = Insert(root->right,key);  }
    return root;
}
int main(){
    int n,v;
    node *root=NULL;
    printf("enter the no of values you wanna enter");
    scanf("%d",&n);
    int i = 0;
    while(i<=n){
         scanf("%d\n",&v);
         root=Insert(root,v);
         i++;
    }
    inorder(root);
    return 0;
}

正如 Jo Black 爵士和 dratenik 所说,该错误是行中的“assignment inside if”

if(root=NULL){ return newNode(key);}

这会将 NULL 分配给 root 并导致条件被视为假。因此,程序继续到下一行并尝试读取 root->info,这是一个空指针取消引用并导致分段错误。

启用警告(并注意他们说的内容)是个好主意。要调试 memory-related 个错误,一个出色的工具是 AddressSanitizer (ASan)。有关如何安装和使用它的信息,请参阅 AddressSanitizer (ASan) for Windows with MSVC Visual Studio。