首页 > 解决方案 > 为什么`main`函数中的局部int变量会自动初始化?

问题描述

我是 C++ 新手,在学习 C++ 时遇到了这个问题。

这是代码

#include <iostream>
using namespace std;

void another_func() {
    int a;
    cout << a << endl;
}

int main() {
    int a;
    cout << a << endl;
    another_func();
}

我正在使用g++ (GCC) 10.1.0,我发现每次运行代码时,函数a内部main都会初始化为0,而ainanother_func将是一个随机数。如下,

➤  g++ test.cpp && ./a.out
a in main: 0
a in another_func: 32612

据我所知,局部变量存储在堆栈中,它们没有自动初始化机制。所以ainanother_func是预期的。但是,有人能告诉我为什么ainmain函数被初始化为0吗?

提前致谢!

标签: c++variablesmain

解决方案


未初始化并不意味着非零,它可以有任何值。在许多操作系统上,新分配的内存页面被填满,0因此在非调试代码中,未初始化的值通常0也是如此。

您的程序的行为是未定义的,但可能发生的情况是,a要么main是第一次使用堆栈,要么你很幸运,并且在main离开堆栈的那个区域之前运行的初始化代码0

调用cout将写入堆栈,因此当您执行another_func堆栈内存时将0不再是全部。


推荐阅读