【问题标题】:C/C++ the result of the uninitialized arrayC/C++ 未初始化数组的结果
【发布时间】:2017-01-14 01:45:12
【问题描述】:

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

代码如下:

#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++ 的 Windows 中,MinGW GCC 4.7.2:

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

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

数组b里全是垃圾值,为什么总是有'0',位置固定,比如“X 0 X 0 X”??

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

【问题讨论】:

  • 请不要发布文字图片。
  • @HIPPO LD 你已经知道答案“数组 b 充满了垃圾值”
  • 对不起,我只是一个菜鸟..也许这是一个真正无聊的问题!
  • @n.m.对不起,我是新来的,而且是编程新手,所以我不知道规则..
  • 无知法律不可原谅!请编辑您的问题以符合站点规则!并且不要为 C++ 问题添加 C 标签!它们是不同的语言。

标签: c++ arrays c++11


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2010-09-23
      • 2010-12-06
      相关资源
      最近更新 更多