我正在尝试编写一个使用2-3-4树的程序,我遇到插入功能问题。这是相关的代码..
int main () {
tree234 myTree;
myTree.insert("hello");
myTree.printTree();
return 0;
}
//-------------tree234.cpp-------------
#include "tree234.h"
#include <string>
#include <iostream>
void tree234::insert(string input){
int index;
if (nullRoot == true) {
//insert root
initNode(root);
root->data[0] = input;
nullRoot = false;
return;
}
}
void tree234::initNode(Node* node) {
node = new Node();
node->pointer[0] = NULL;
node->pointer[1] = NULL;
node->pointer[2] = NULL;
node->pointer[3] = NULL;
node->data[0] = "";
node->data[1] = "";
node->data[2] = "";
}
//-----------tree234.h--------------
#ifndef TREE_234_H_
#define TREE_234_H_
using namespace std;
#include <iostream>
class tree234{
private:
struct Node {
public:
string data[3];
Node* pointer[4];
};
Node* curr;
Node* root;
Node* right;
Node* newRoot;
bool nullRoot = true;
public:
void insert(string data);
void initNode(Node* node);
};
#endif
它始终在第19行中断,内存地址错误。我已经尝试过调试它,它在字符串文件中的第2245行中断(如果这有帮助的话)。这些信息对我没有多大帮助,所以也许有人可以帮我解决这里究竟出了什么问题?
答案 0 :(得分:1)
有很多问题。修复以下内容,看看它是否有效......
cpp,插入:
你的if条件是一项任务。
cpp,initNode:
该函数正在更改传递指针的副本
调用者不会得到任何已分配的对象
使用对指针(&amp; *)的引用或指向指针的指针
(具有匹配的函数调用和内容)作为参数..
即,
void tree234::initNode(Node *& node)
答案 1 :(得分:0)
一,你有:
if (nullRoot = true) {
你可能想要的是“==” 您应该检查编译器警告以及错误。 希望有所帮助。 :)
“==”是比较(结果布尔值),而“=”是赋值,因此您将nullRoot设置为true。