Я использовал оператор стрелки, чтобы распечатать значения переменных моего объекта, и я получаю некоторые случайные значения в качестве вывода - PullRequest
0 голосов
/ 15 июня 2019

Я попытался напечатать значения объекта a структурного узла, и я получаю случайные значения в качестве выходных данных вместо того, что назначено в конструкторе, функция-член работает отлично. Я также пытался присвоить значение оператора как a- > right_node = & var и при запуске кода я получаю сообщение об ошибке о том, что файл .exe не работает

#include<iostream>

using namespace std;

struct node{
    int right_node;
    int left_node;
    int parent_node;

    node(){
        right_node=5;
        left_node=5;
        parent_node=5;
    }

    void func()
    {
        cout<<"Hello World?";
    }
};

int main()
{
    node *a;
    a->func();
    cout<<endl<<a->left_node<<":"<<a->parent_node<<":"<<a->right_node;
    return 0;
}

1 Ответ

2 голосов
/ 15 июня 2019

Вы создали указатель на node, но вы не создали node, чтобы он указывал на.Разыменование такого недопустимого указателя приводит к неопределенному поведению.

Вам необходимо создать node для a, на который нужно указать.Либо объект с автоматическим временем жизни:

int main()
{
    node n;
    node *a = &n;
    a->func();
    std::cout << '\n' << a->left_node << ':' << a->parent_node << ':' << a->right_node;
}

Или объект с динамическим временем жизни:

int main()
{
    node *a = new node;
    a->func();
    std::cout << '\n' << a->left_node << ':' << a->parent_node << ':' << a->right_node;
}

Хотя в первом случае вам, вероятно, вообще не нужен указатель, и вВ последнем случае вы должны использовать умный указатель, такой как std::unique_ptr или std::shared_ptr, чтобы обеспечить правильное освобождение объекта node.

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