C / C ++未初始化数组的结果

时间:2016-09-06 14:38:49

标签: c++ arrays c++11

这可能是一个无聊的问题!谢谢!

以下是代码:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
        int a[5] = {0};
        int b[5];
        cout << a << endl;
        cout << b << endl;
        for (int i = 0; i < 5; i++)
        {
                cout << a[i] << " ";
        }
        cout << endl;
        for (int i = 0; i < 5; i++)
        {
                cout << b[i] << " ";
        }
        cout << endl;
        return 0;
}

在Ubuntu中:g ++ a.cpp

enter image description here

在带有DEV C ++的Windows中,MinGW GCC 4.7.2: enter image description here

所以问题集中在数组b:

我知道我没有初始化数组b。

数组b充满了垃圾值,但为什么总是有“0”的固定位置,如“X 0 X 0 X”??

里面发生了什么? 只是一种保护机制?

2 个答案:

答案 0 :(得分:4)

这是未定义的行为。如果这些零在那里,则无法保证只是意外是真的。

解释是,由于某些随机原因,在内存中的这些位置存储了一个0,然后才重新用于此目的。由于您在堆栈上分配了数组,因此这些零可能来自先前的函数调用,可能是一些填充。编译器会随心所欲地做到这一点。

答案 1 :(得分:1)

读取数组中未初始化元素的行为是 undefined 。允许编译器执行任何操作。

(由于括号初始化,可以读取a的所有元素,尽管在C ++中你可以写int a[5] = {};)。