【问题标题】:Segmentation fault (core dumped) in BSTBST 中的分段错误(核心转储)
【发布时间】:2020-12-31 22:23:07
【问题描述】:

我已经检查了百万次的代码但是这个错误不会出现请帮助,它是用于创建二叉搜索树的程序... 我正在使用 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;
}

【问题讨论】:

  • 那是什么:if(root=NULL)?我认为应该是`if(root==NULL)`。
  • 您的代码格式不一致且到处都是。如果您希望其他程序员阅读您的代码,请采用更传统的方式。我懒得破译这个并计算所有的大括号......
  • "assignment inside if" 通常会被警告捕获。在运行任何东西之前,您应该在启用警告的情况下进行编译并修复所有警告。

标签: c binary-search-tree insertion


【解决方案1】:

就像 Jo Black 爵士和 dratenik 所说的那样,该错误是行中的“if 内部赋值”

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

这会将 NULL 分配给 root 并导致条件被视为错误。于是,程序继续下一行,尝试读取root-&gt;info,这是一个空指针解引用,会导致分段错误。

启用警告是个好主意(并注意他们所说的内容)。对于调试与内存相关的错误,一个出色的工具是 AddressSanitizer (ASan)。如何在 Visual Studio 中安装和使用,请参阅AddressSanitizer (ASan) for Windows with MSVC

【讨论】:

  • @SamarthShinde 如果这解决了您的问题,请不要忘记“接受答案”。
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 2015-06-25
  • 2021-06-03
相关资源
最近更新 更多