我开始编写一个二叉树,然后提出这个例子,我不知道发生了什么。因此,这里的代码:C++对象指针范围
#include<iostream>
using namespace std;
struct Node
{
Node *left, *right;
int key;
Node()
{
left = NULL;
right = NULL;
key = 0;
}
Node(int key)
{
left = NULL;
right = NULL;
key = key;
}
};
struct Tree
{
Node* root;
void Add(int k)
{
Node* t;
t->key = k;
root->left = t;
}
Tree(int key)
{
this->root = new Node(key);
}
};
int main()
{
Tree* tree = new Tree(5);
tree->Add(4);
cout<<tree->root->left->key;
return 0;
}
添加功能添加在树是什么让我困惑。所以,有一个指向Node对象的指针,但是没有使用new关键字,并且在我看来,无论如何有堆分配在堆中,因为我可以到达该对象。不应该超出范围并被销毁?为什么我可以达到这个目标并打印出它的钥匙?
未定义的行为是_undefined_。 –
我投票结束这个问题作为题外话,因为要求未定义行为的实际_workings_是没用的。 –
我不知道这是未定义的行为,因为它编译在我的电脑上。 – user3199819