来自非初始化变量的值从何而来
Where do values from unintialized variables come from?
当你声明一个局部变量时,我喜欢这样:
int i;
你使用这个变量,你会得到未定义的行为,因为我还没有初始化。但我手里拿着一个价值,一个"垃圾"价值,这个价值从何而来? 是来自记忆中的随机位置吗?
你不知道,你说不出来。未定义的行为意味着任何事情都可能发生。
也就是说,在实践中,在大多数实现和大多数情况下,int i;
将在堆栈上保留 sizeof(int)
字节(通常在主内存中的某个位置),因此 i
的值将是此时堆栈上碰巧出现的任何内容。
但不要依赖它,请记住这并不总是正确的。
它之前在 &i 的内存中。
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 类POD成员变量初始化
- 尝试捕获类变量初始化的范围
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 多变量初始化编译器支持