试图实现BST时,将C 的分割故障(核心倾倒)



我正在尝试使用链接列表创建一个BST。我试图在适当的时候向左或向右穿越树,直到找到一个空,然后尝试创建一个节点并在该位置给出一个值。

现在我得到了错误

分割故障(核心倾倒)

来自此代码(逻辑可能是不正确的,因为这是正在进行的工作)

#include <iostream>
using namespace std;
struct Node
{
    int data;
    Node *left, *right;
    Node(int data)
    {
        this->data = data;
        left = right = NULL;
    }
};
void traverseIn(Node *node, int val);
int main()
{
    int numOfNodes;
    cout << "number of nodes ";
    cin >> numOfNodes;
    for(int i = 0;i<numOfNodes;i++){
        struct Node *root;
        int data;
        cout << "data ";
        cin >> data;
        root->data = data;
        traverseIn(root,data);
    }
}
void traverseIn(Node *node , int val){
    if (node == NULL){
        node->data = val;
        return;
    }
     //go leftdat
     if (val <= node->data) {
        cout << "nleft " << val<<" "<< node->data;
        traverseIn(node->left,val);
     }
     else if(val > node->data){
         //go right
        cout << "nright " << val<<" "<< node->data;
        traverseIn(node->right,val);
     }
     cout << node->data << " ";
}

样本输出

节点的数量5

数据12

左12 12

分割故障(核心倾倒)

我想知道的是

1)当我经常遇到它时,我该如何调试此错误。我使用它带有的默认编译器以及Microsoft的C/C 扩展名,在Ubuntu中使用VS代码,但是当我附加一个断点时,我只会得到调用堆栈。我该如何设置它,以便可以像java程序一样逐步浏览。

2)如何使C 打印出有意义的错误消息,而不仅仅是SEG故障消息。例如,我想知道程序中的哪一行有错(尽管在此示例中很明显)。

3)如何解决此错误。

我已经阅读了XKCD模因,什么是分割错误?

root未定义。您的代码导致对未定义指针的解除。您可以在此处尝试代码

=============#0#0 stensal运行时消息==============

运行时错误: [删除未定义的指针]
继续执行会导致不确定的行为,中止!

-
- Writing 4 bytes to an undefined address (0x0).
- 
- Stack trace (most recent call first) of the write.
- [1]  file:/prog.cc::27, 9
- [2]  [libc-start-main]
-

===============#0#0 stensal运行时消息==============

一个简单的修复程序(仅用于修复segfault,但不是代码的逻辑)

root = new Node(data);

相关内容

  • 没有找到相关文章