为什么`main`函数内的局部int变量会被自动初始化?

Vol*_*otz 1 c++ variables program-entry-point

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

这是代码

#include <iostream>
using namespace std;

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

int main() {
    int a;
    cout << a << endl;
    another_func();
}
Run Code Online (Sandbox Code Playgroud)

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

?  g++ test.cpp && ./a.out
a in main: 0
a in another_func: 32612
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Ala*_*les 6

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

你的程序的行为是不明确,但什么是有可能发生的是,amain要么是第一次使用堆栈或者你只是很幸运和初始化代码之前运行main堆栈的叶子面积0

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