【问题标题】:C++ initialized array last value is random [closed]C ++初始化数组最后一个值是随机的[关闭]
【发布时间】:2018-12-18 21:29:12
【问题描述】:

我对此进行了很多搜索,但没有找到满意的答复。我正在编写一个小的数学算法来学习一些编程语言,因此,这是我的第一个 C++ 程序的一部分。但是,我似乎无法修复这个数组。尽管人们说数组中的随机值是由于数组未初始化,并且您应该将它们初始化为您想要的值,如下所示:int array[sizeOf] = {0},但它仅在此示例中起作用。如您所见,数组的所有值都设置为 0,除了最后一个,它似乎没有被初始化:是什么原因造成的,我该如何解决?

#include <iostream>
using namespace std;

int initialNumber;

int main()
{
    cout << "Enter Range value:" << endl;
    cin >> initialNumber; //get size

    cout << "Solving..." << endl << endl;

    //initialize basic ints to be used for calculations
    int limiter = initialNumber/2; //the max value we will ever have to multiply by
    int arraySize = initialNumber++; //size of the array
    int resultingFactorsArray[arraySize] = {0}; //main array

    //print each array item value
    for (int x = 0; x <= arraySize; x++) {
        cout << resultingFactorsArray[x] << endl; //print all array values
        //all values printed should be 0, but the last one is uninitialized
    }
}

【问题讨论】:

  • int resultingFactorsArray[arraySize] 是一个可变长度数组,不是标准的。使用-pedantic编译会报错。
  • 我会回去阅读更多关于 C++ 和数组的内容。引用 Bjarne Stroustrup 的话:“C 让你很容易射中自己的脚;C++ 让它更难,但当你这样做时,它会把你的整条腿都炸飞。”不阅读,你将继续犯严重的错误。
  • 如果你得到一个超出范围的错误,你就知道你有问题了!修复错误。
  • @SojanJanso 数组从 0 索引开始。因此,如果您有一个大小为 10 的数组,则最后一个有效索引是 9,而不是 10。
  • 至于为什么没有报错,见:stackoverflow.com/questions/1239938/…

标签: c++ arrays random initialization


【解决方案1】:

数组是从 0 开始的。意思是,在您的for 循环中,for (int x = 0; x &lt;= arraySize; x++),部分x &lt;= arraySize 应该是x &lt; arraySize

一个例子:

如果您声明数组大小 10,则有效的数组索引为 0,1,2,3,4,5,6,7,8,9(总共 10 个索引)。

如果您将其放入带有x &lt;= 10for 循环中,您的最后一个索引将是array[10](未定义/未初始化)。

简而言之,您的初始化是正确的,只是您的 for 循环超出了范围。

【讨论】:

  • 啊,是的,我应该明白这一点的。我知道这一点,我只是在运行函数时将它放在那里一段时间,它没有抛出任何错误......必须喜欢未定义的行为......
猜你喜欢
  • 2019-02-16
  • 1970-01-01
  • 2018-10-12
  • 2013-01-12
  • 1970-01-01
  • 2020-12-10
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多