运行失败/分段故障binaryTree C
Run failed/segmentation fault BinaryTree c++
,所以我发现我的插入方法有一个问题会导致分割故障,但不知道何处或如何解决。
我的插入方法就是这样:
NodeTree* BinarySearchTree::insert(NodeTree *node,int element){
NodeTree *current;
if(empty()){
root->setElement(element); //Si es null creem l'arrel i la retornem
root->setParent(current);
return root;
}
if(node!=nullptr){
current=node; //Si el node no és null l'igualem amb un auxiliar
//que despres serà retornat segons el contigut del node
}
if(element<=node->getElement()){
current=node; //els elements més petits a l'esquera
node->setLeft(insert(node->getLeft(),element)); // crida recursiva
}
else{
current=node; // elements més grans a la dreta
node->setRight(insert(node->getRight(),element));//crida recursiva
}
return node; //un cop fet el procediment anterior retorna el node
whye empty((为返回root == nullptr;
也是我的主要.cpp,其中引起了问题:
case 1:
cout<<"Numero a afegir: "; cin>>num; cout<<""<<endl;
if(tree.empty()){
root->setElement(num);
}
tree.insert(root,num);
break;
如果无论如何都会共享完整的代码,那么代码有几个错误,
segfault很可能发生,因为以下语句将永远是错误的基本案例永远不会满足,然后代码在下面并使用null指针,因为下面的条件是错误的:
if(empty()){
root->setElement(element); //Si es null creem l'arrel i la retornem
root->setParent(current);
return root;
}
上面的检查root == nullptr
始终为false,将上述代码删除并按照我在下面提到的如何设置基本情况进行更新。
null指针被用作代码到达此处的代码,即使node
为null:
if(element<=node->getElement()){
getElement将被调用,而节点为null,因为上面的检查是检查root == nullptr
,而是应该检查node == nullptr
,主要您也应该广告中断语句,并且最有可能的新声明也可能是造成细分故障的原因:
if(tree.empty()){
root = new TreeNode;
root->setElement(num);
break;
}
tree.insert(root,num);
如果您已经在构造函数中分配了一个有效的对象,则忽略新的对象,但要保持突破。我希望您将Treenode的左右孩子设置为构造器中的nullptr。
您还在以下行中设置一个悬挂的指针:
root->setParent(current);
current
指针尚未分配任何值,我相信您想检索以前的函数中设置的值current
,然后您应该在下面进行current
静态:
static NodeTree *current;
基本情况应如下:
写下if (node == nullptr)
{
node = new NodeTree;
node->setElement(element); //Si es null creem l'arrel i la retornem
node->setParent(current);
return node;
}
您没有共享完整的代码,可能是您的代码的更多问题,以下是BST插入的示例:
#include <iostream>
using namespace std;
class BstNode {
public:
int data;
BstNode* left, *right;
BstNode()
{
left = nullptr;
right = nullptr;
}
};
class Bst {
private:
BstNode* root;
public:
Bst()
{
root = nullptr;
}
void insert(int element)
{
root = insert(root, element);
}
BstNode* insert(BstNode* node, int element)
{
if (node == nullptr)
{
node = new BstNode;
node->data = element;
}
else if (root->data > element)
{
node->left = insert(node->left, element);
}
else
{
node->right = insert(node->right, element);
}
return node;
}
void print()
{
print(root);
}
void print(BstNode* root)
{
if (root == nullptr)
return;
cout << root->data << " ";
print(root->left);
print(root->right);
}
};
int main()
{
Bst bst;
bst.insert(6);
bst.insert(3);
bst.insert(8);
bst.insert(2);
bst.insert(7);
bst.insert(4);
bst.print();
return 0;
}
如果空((为返回root == nullptr;这意味着,当您的树是空的时,您无法打电话NULL指针上的setElement(num(。您首先需要初始化它。诸如root = new root_type((之后,之后设置了相应的值。
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- 分段故障背包问题
- 运行失败/分段故障binaryTree C