Array具有比预期更多的值

时间:2014-11-28 03:23:14

标签: c++ arrays

我有一个简单的程序,声明一个整数数组,它的大小,根据大小为它分配内存,初始化元素,然后打印出数组中的每个初始化元素。但是,输出并不是我所期望的,我似乎无法找到任何文档来解释它。我将在下面发布代码和输出:

#include <iostream>

void main(int argc, char **argv)
{
    int* a;
    int size = 4;

    a = new int[size];

    for(int i = 0; i < size; i++)
    {
        a[i] = i + 1;
    }

    for(int i = 0; ; i++)
    {
        if(a[i])
        {
            std::cout << "a[" << i << "] = " << a[i] << std::endl;
        }
        else
        {
            break;
        }
    }

    system("PAUSE");
}
  • 输出:
  • a [0] = 1
  • a [1] = 2
  • a [2] = 3
  • a [3] = 4
  • a [4] = -33686019
  • a [5] = -1414812757
  • a [6] = -1414812757
  • a [7] = -17891602

1 个答案:

答案 0 :(得分:0)

for(int i = 0; ; i++)

你的循环什么时候结束?!?!? for中的第二个条件(测试表达式)被评估为true(至少与i<4一样长)。你需要

for(int i = 0; i < 4 ; i++)

否则它可能会在i>=4之后的任何时间中断,但不会在之前,因为a的所有组件i<4a[i] = i + 1;)都不为零,并且{{1}之后你有未定义的行为,因为你没有为i==4分配足够的内存。

此外,a应根据main标准返回int

PS:对于绝大多数简单的例子,大多数时候你甚至不需要调试器,只需在头脑中或在纸上模拟程序正在做什么,逐行,你会发现错误。