【发布时间】:2015-09-30 08:07:08
【问题描述】:
我开始编写二叉树,然后想出了这个例子,但我不确定发生了什么。代码如下:
#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;
}
Add 函数 Add in Tree 让我很困惑。因此,有一个指向 Node 对象的指针,但没有使用 new 关键字,在我看来,无论如何在堆中分配了内存,因为我可以访问该对象。不应该超出范围并被销毁吗?为什么我可以到达那个物体并打印出它的钥匙?
【问题讨论】:
-
未定义的行为,嗯未定义。
-
我投票决定将此问题作为题外话结束,因为询问未定义行为的实际 工作原理 是没有用的。
-
我不知道这是未定义的行为,因为它在我的计算机上编译。