我尝试打印结构节点的对象 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_ptr
或std::shared_ptr
)来确保正确释放node
对象。