删除 main 中的 int 后 BST 代码停止工作

BST code stops working after deleting the int in main

所以,我试图编写一个只有插入的二叉树代码,它工作正常,但在我删除一些无用的 int 后,它由于某种原因停止工作。谁能告诉我为什么

所以,这是我的代码,它工作正常。但是,当我删除 int main 中的 int i=3; 时,它会停止工作。这是为什么?顺便说一句,int i=3; 只是一个随机数,如果我将其更改为其他数字,它仍然有效

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

struct Treenode{ 
    int data; 
    struct node*left; 
    struct node*right; 
}; 
typedef struct Treenode Treenode;


struct Treenode* CreateTree(struct Treenode** tree, int num) { 
 
    Treenode*temp = NULL;
    if(!(*tree))
    {
        temp = (Treenode*)malloc(sizeof(Treenode));
        temp->left = temp->right = NULL;
        temp->data = num;
        *tree = temp;
        return;
    }

    if(num < (*tree)->data){
        CreateTree(&(*tree)->left, num);
    }
    else if(num > (*tree)->data){
        CreateTree(&(*tree)->right, num);
    }
    
}

void inorder(struct Treenode* root)
{
    if (root != NULL) {
        inorder(root->left);
        printf("%d \n", root->data);
        inorder(root->right);
    }
}

int main(){
    int i = 3;
    //creating tree
    Treenode*root;
    
    
    CreateTree(&root, 1);
    CreateTree(&root, 2);
    CreateTree(&root, 3);
    CreateTree(&root, 4);
    CreateTree(&root, 5);
    CreateTree(&root, 6);

    inorder(root);
    

    return 0;
}

非静态局部变量Treenode *root;没有初始化,所以它的初始值是不确定的。使用这种不确定的值可能会引起一些麻烦。

Treenode *root = NULL;一样初始化变量来解决这个问题。

另请注意,malloc() 家族的铸造结果是 considered as a bad practice