试图在C 中保持一个匿名变量

Trying to keep an anonymous variable alive in C++

本文关键字:一个 变量      更新时间:2023-10-16

这个简单的代码块以出乎意料的方式行为。

#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;
}

我期望将" C"作为输出,而是输出'}'。我觉得它必须与将"数据"指针分配给匿名变量的" c'"。

我发现这个问题讨论了一个类似的问题。

但是,正如最高答案中提到的那样,匿名变量只有在表达式结束时没有引用指针的指针来杀死它。我认为,这不是我对指针("数据")约束的情况,但它仍然以某种方式被杀死。

我想知道这是导致意外输出的事情。

在您的班级中:

Node(char d)
{
   data = &d;
}

char d是构造函数节点的参数。问题是D仅在程序堆栈的本地范围内生活。当代码从构造函数返回时,它就会停止。现在,数据的地址指向程序堆栈中的某个地方。如果您尝试阅读数据,则可以读取以后在堆栈上推出的其他内容。如果您写入此地址,则覆盖程序中的其他一些变量。它可能会崩溃或只是做一些意外的事情。