Я пытаюсь создать 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) как я могу отладить эту ошибку, как я часто сталкиваюсь с ней.Я использую VS Code в Ubuntu, используя компилятор по умолчанию, который он поставлял, и расширения C / C ++ от Microsoft, но когда я присоединяю точку останова, я получаю только стек вызовов.Как я могу настроить его так, чтобы я мог шагать по нему, как если бы я был Java-программой.
2) Как я могу заставить C ++ распечатывать значимые сообщения об ошибках, а не просто сегментировать сообщение об ошибке.Например, я хотел бы знать, какая строка в программе является ошибкой (хотя это очевидно в этом примере).
3) Как я могу исправить эту ошибку.
Я прочитал xkcd meme и Что такое ошибка сегментации?