这个简单的代码块以意想不到的方式运行。
#include <iostream>
using namespace std;
class Node
{
public:
char* data;
Node(char d)
{
data = &d;
}
};
int main()
{
Node NodeA = Node('c');
cout<<*(NodeA.data)<<endl;
return 0;
}
我期待得到&#39; c&#39;作为输出,但它输出&#39;}。 我觉得它必须与分配&#34;数据&#34;指向匿名变量的指针,该变量是&#39; c&#39;。
我发现这个question讨论了类似的问题。
但是正如在最高层回答中提到的那样,匿名变量只有在没有被表达式末尾引用它的指针限制时才会被杀死。我认为这不是这里的情况,因为我将指针(&#34;数据&#34;)绑定到它,但不知何故它仍然被杀死。
我想知道导致意外输出的内容。
答案 0 :(得分:5)
在你班上:
Node(char d)
{
data = &d;
}
char d是构造函数Node的参数。问题是d只存在于程序堆栈的本地范围内。当代码从构造函数返回时,它不再存在。 数据现在有一个指向程序堆栈中某处的地址。如果您尝试读取数据,则可以阅读稍后在堆栈上推送的其他内容。如果您写入此地址,您将覆盖程序中的其他一些变量。它可能崩溃或只是做一些意想不到的事情。