试图在C 中保持一个匿名变量
Trying to keep an anonymous variable alive in C++
这个简单的代码块以出乎意料的方式行为。
#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仅在程序堆栈的本地范围内生活。当代码从构造函数返回时,它就会停止。现在,数据的地址指向程序堆栈中的某个地方。如果您尝试阅读数据,则可以读取以后在堆栈上推出的其他内容。如果您写入此地址,则覆盖程序中的其他一些变量。它可能会崩溃或只是做一些意外的事情。
相关文章:
- 用C++中的一个变量定义一个常量
- 一个变量的输入值也会保存到另一个变量中
- 将双精度变量设置为另一个变量的值
- 对具有相同方法的不同类使用一个变量
- 为什么一个变量获得与另一个值相同的值
- 尝试在 C++ 中为 ifstream 提供一个变量
- 类中的一个变量显示,但另一个不显示
- 声明一个变量,该变量在 c++ 或 c 中具有值,当程序终止时不会被销毁
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 如何将一个变量用于父类和派生类
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- 我如何将一个变量与另一个变量进行比较,例如我想如果(var1 > var2 x 1),然后执行此 c++
- 如何在一个函数中定义一个变量,并在另一个函数中访问和更改它?(C++)
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 迭代器或反向器的一个变量
- fstream库,试图创建一个变量名为(c++)的文件
- 如何在 c++ 中将两个不同类型的变量分配给一个变量
- 如何将一些变量放在一个变量中?
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何用索引命名一个变量来存储输入 mxArray?