我使用箭头运算符打印出对象的变量值,并得到一些随机值作为输出



我尝试打印结构节点的对象 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;
}

您创建了一个指向node的指针,但没有为其创建指向的node。 取消引用此类无效指针会导致未定义的行为。

您需要创建一个供a指向的node。 具有自动生存期的对象:

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_ptrstd::shared_ptr)来确保正确释放node对象。

最新更新