需要帮助修复分段错误(核心转储)
Need help fixing a segmentation fault (core dumped)
friends.所以我使用 vim 作为我的编辑器在 ubuntu 中创建了一个二叉搜索树类,当我运行我的程序时,我总是收到分段错误(核心转储(错误。奇怪的是,当我在 NetBeans 上运行这个程序时,它运行得很好。这是我的代码
#include <iostream>
using namespace std;
class BST
{
struct node {
int data;
node* left;
node* right;
};
private:
node* root;
node* addHelper(node* temp, int data)
{
if(temp == NULL)
{
temp = new node;
temp->left = temp->right = NULL;
temp->data = data;
return temp;
}
if(data < temp->data)
{
temp->left = addHelper(temp->left, data);
}
else if(data > temp->data)
{
temp->right = addHelper(temp->right, data);
}
return temp;
}
void printHelper(node* cur)
{
if(cur == NULL)
{
return;
}
else {
printHelper(cur->left);
cout << cur->data << " ";
printHelper(cur->right);
}
}
public:
void add(int value)
{
root = addHelper(root, value);
}
void printInorder()
{
printHelper(root);
}
};
int main()
{
cout << "Second Test, linux runnning sucsesfully"<<endl;
BST mytree;
mytree.add(20);
mytree.add(25);
mytree.add(10);
mytree.add(22);
mytree.add(15);
mytree.add(12);
mytree.add(23);
mytree.printInorder();
return 0;
}
我已经使用 gdb 进行调试,它指出了 printHelper 函数上的错误,但我看不到错误。 如果您知道如何解决此问题,请帮助我。提前谢谢你
当然是的,问题是使用root
的数据成员而不是初始化
问题的解决方案
public:
BST(){
root = new node();
}
如果用例需要在构造函数中进行更多操作,您还可以使用初始值设定项列表,这在可读性方面很好。只是一个附加组件,您应该始终使用初始值设定项列表初始化const
和reference
。
或使用初始值设定项列表
public:
BST(node* root):root(root){
//Any other initialization /Operation
}
或者给它一个 NULL(或 nullptr,在最新的 C++ 标准中(。
public:
BST() : root(NULL) { }
我们这里的默认 ctor 使其为 NULL(如果需要,请替换为 nullptr(,第二个构造函数将使用传递的值对其进行初始化。
在使用 root
变量之前,您不会对其进行初始化。可以在构造函数中对其进行初始化,如下所示:
public:
BST(){
root = new node();
}
修复只是将根初始化为 NULL 。[不要在那里分配任何东西。构造函数必须如下所示
BST() {
root = NULL;
}
此外,根只能创建一次 我们不应该永远改变它。因此,请更改如下所示的代码
if (root == NULL) {
root = addHelper(root, value);
} else {
addHelper(root, value);
}
相关文章:
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 合并排序:分段错误核心转储
- C++:分段错误(核心转储)
- 从 pybind11 构建导入模块时出现"分段错误(核心转储)"
- 如何使用 lldb 在曼扎罗中调试 lz4 文件格式的核心转储?
- qt C++命令行代码中的分段错误(核心转储)
- 从文件中读取的数据,但发生核心转储错误
- googletest:测试基类具有纯虚拟方法的派生类时的核心转储
- C++ atof - 分段错误(核心转储)
- Linux C 只禁止我的程序使用核心转储
- 为什么我的代码包含错误分段错误(核心转储)?