не может получить доступ к памяти по адресу 0xc8 - PullRequest
0 голосов
/ 09 октября 2018

Я пишу код для возврата данных узла в BST на основе идентификатора.ниже мой класс узла:

struct Node{
int id;
string data;
Node *left;
Node *right;
Node();
};

ниже мой конструктор узла: я определил id и данные в функции addNode

Node :: Node(){
this->left = nullptr;
this->right = nullptr;
}

ниже мой класс BST:

class BST{
private:
Node * root = nullptr;
void setRoot(Node *);
Node* getRoot();
public:
Node *addNode(BST *, int);//helper function
Node *addNode(Node *,int);
string getEntry(BST*,int);//helper function
string getEntry(Node*,int);
}

ниже мои вспомогательные функции:

Node *BST::addNode(BST *bst, int val){
addNode(bst->getRoot(),val);
}

string BST::getEntry(BST* bst,int id){
getEntry(bst->getRoot(),id);
}

ниже мой класс addNode:

Node* BST::addNode(Node* root, int val) {
Node *newNode = new Node();
newNode->id = val;
newNode->data = "Number " + to_string(val);
if (root == nullptr) {
    if (getRoot() == nullptr){
        setRoot(newNode);
    }
    setCount(getCount()+1);
    return newNode;
}
if (root->id > val) {
    root->left = addNode(root->left, val);
} else {
    root->right = addNode(root->right, val);
}
return root;
}

ниже мой класс getEntry:

string BST::getEntry(Node *base,int id) {
if (base == nullptr){
    return "";
}
if (base->id == id){
    cout<<base->data<<endl;
    return base->data;
}
getEntry(base->left,id);
getEntry(base->right,id);
}

нижеузлы, которые я передал из main:

int main(){
BST *newBst = new BST();
newBst->addNode(newBst,1);
newBst->addNode(newBst,2);
newBst->addNode(newBst,3);
newBst->addNode(newBst,2);
newBst->addNode(newBst,3);
newBst->addNode(newBst,5);
newBst->addNode(newBst,7);
newBst->addNode(newBst,10);

cout<<newBst->getEntry(newBst,5)<<endl;
return 0;
}

Код скомпилируется, но ничего не возвращает, я пытался отладить, в «return base-> data data», ошибка «не могу»доступ к памяти по адресу 0xc8 ".В чем причина проблемы и что я могу с этим поделать?

- это предупреждение, которое я получаю, когда отлаживаю код.enter image description here

1 Ответ

0 голосов
/ 09 октября 2018
if (base->id != id){
    getEntry(base->left,id);
    getEntry(base->right,id);
}

Поскольку вы используете отсортированное дерево, вы знаете, на какой из правых или левых узлов вам нужно взглянуть.Кроме того, вам нужно что-то вернуть:

if (base->id > val){
    return getEntry(base->left,id);

} return getEntry (base-> right, id);

Но дизайн с addNode очень плох, вам не следуетнадо дважды пройти рут!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...