C/C++ 未初始化数组的结果[重复]

问题描述 投票:0回答:2

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

这是代码:

#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

在使用 DEV C++、MinGW GCC 4.7.2 的 Windows 中:

所以问题集中在数组b上:

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

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

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

c++ arrays c++11
2个回答
7
投票

这是未定义的行为。无法保证,如果这些零存在,那只是偶然地为真。

解释是,由于某种随机原因,在内存中的这些位置存储了 0,然后才将其重新用于此处的目的。由于您在堆栈上分配数组,因此这些零可能来自先前的函数调用,并且可能是一些填充。编译器会按照他的意愿去做。


2
投票

读取数组中未初始化元素的行为是未定义。编译器可以做任何事情。

(由于大括号初始化,

a
的所有元素都可以读取,尽管在C++中你可以写
int a[5] = {};
)。

© www.soinside.com 2019 - 2024. All rights reserved.