Указатель изменяется после возврата из функции

Я внедрял дерево для компании, которую мне нужно было связать с деревом AVL для поиска по журналам.

Функция поиска внутри дерева AVL:

node* searchNode(string S, node* root) //(S,root)
{
    if (root->Name == S)
    {
        if (root->present == 1)
        {
            cout<<"root found"<<endl;
            cout<<root<<endl;
            return root;
        }
        else
        {
            cout<<"not found"<<endl;
            return NULL;
        }
    }
    else if (S > root->Name)
    {
        cout<<"search shifted right"<<endl;
        searchNode(S, root->right);
    }
    else
    {
        cout<<"search shifted left"<<endl;
        searchNode(S,root->left);
    }
}

И еще одна функция:

node* search(string S)
{
    cout<<"started search"<<endl;
    node *searchResult;
    searchResult = companyTree.searchNode(S,companyTree.root);
    cout<<searchResult<<endl;
    cout<<"finished search"<<endl;
    return searchResult;
}

Проблема в том, что

cout<<root<<endl;

и

cout<<searchResult<<endl;

не давайте один и тот же адрес указателя. Более того, когда я пытаюсь получить доступ к любому элементу узла, возвращенному функцией search(S), я получаю ошибку сегментации. Что я должен делать?

Узел структуры:

struct node
{
    string Name; 
    node *left;
    node *right;
    employee* self;
    int present; //1 if present, 0 if absent
    node()
    {
        Name= " ";
        left= NULL;
        right=NULL;
        self=NULL;
        present=-1;
    }   
};

person chandan    schedule 12.09.2014    source источник
comment
Вы не обрабатываете возвращаемое значение из ваших рекурсивных вызовов searchNode.   -  person Sneftel    schedule 12.09.2014


Ответы (1)


Добавьте return, когда вы вызываете функцию рекурсивно.

node* searchNode(string S, node* root) //(S,root)
{
    if (root->Name == S)
    {
        if (root->present == 1)
        {
            cout<<"root found"<<endl;
            cout<<root<<endl;
            return root;
        }
        else
        {
            cout<<"not found"<<endl;
            return NULL;
        }
    } 
    else if (S > root->Name)
    {
        cout<<"search shifted right"<<endl;
        return searchNode(S, root->right);
    }
    else
    {
        cout<<"search shifted left"<<endl;
        return searchNode(S,root->left);
    }

Надеюсь, это сработает.

person Chandan    schedule 13.07.2015