我数组中的最后一个元素是一个我从未输入过的大数字
Last Element in my Array is a large number that I never inputted
我将“掷骰子”的结果存储在数组中。
一切似乎都工作正常,除了数组的最后一个值是 ╠ (-858993460)?
我尝试了故障排除并在一开始就发生了,但我不知道为什么。
const int QDice = 3;
int Domain = 6 * QDice;
int CD[6 * QDice]{};
do
{
cout << "Array CD[" << i << "] = " << CD[i] << "\n";
i++;
} while (i <= Domain);
这产生:
Array CD[1] = 0
...
Array CD[18] = -858993460
一切正常接受最后一个元素。
C++数组索引从0开始,所以数组CD[]
的范围是1到17。当Domain
变成18时,数组越界。我建议您可以将代码修改为以下代码。
do
{
cout << "Array CD[" << i << "] = " << CD[i] << "\n";
i++;
} while (i <= Domain - 1);
如评论和 中所述,您假设索引从 1 开始,而 C++ 数组使用从 0 开始的索引。这意味着索引 18 越界,即它超出了数组的末尾。但为什么会出现负数?
首先,当存在越界条件时,程序会表现出未定义的行为。这意味着该程序实际上可以做任何事情,无论它是否符合您的意图。但在实践中,程序通常会假定数组对于所使用的索引来说足够大。因此,在您的情况下,它将查找索引 18 应该所在的内存(好像数组足够大),然后尝试将它在那里找到的字节解释为一些有意义的值。
现在,作为一般规则,内存可以有任何值,除非您将其设置为特定的值。通过初始化数组,您可以将每个数组元素的内存设置为一个确定的值 (0)。但刚好超过数组末尾的是您尚未设置的内存,因此这些字节可以是任何内容。在您的情况下,它们恰好以被解释为 -858993460 的方式设置,但这也可以是任何其他值。
我将“掷骰子”的结果存储在数组中。 一切似乎都工作正常,除了数组的最后一个值是 ╠ (-858993460)? 我尝试了故障排除并在一开始就发生了,但我不知道为什么。
const int QDice = 3;
int Domain = 6 * QDice;
int CD[6 * QDice]{};
do
{
cout << "Array CD[" << i << "] = " << CD[i] << "\n";
i++;
} while (i <= Domain);
这产生:
Array CD[1] = 0
...
Array CD[18] = -858993460
一切正常接受最后一个元素。
C++数组索引从0开始,所以数组CD[]
的范围是1到17。当Domain
变成18时,数组越界。我建议您可以将代码修改为以下代码。
do
{
cout << "Array CD[" << i << "] = " << CD[i] << "\n";
i++;
} while (i <= Domain - 1);
如评论和
首先,当存在越界条件时,程序会表现出未定义的行为。这意味着该程序实际上可以做任何事情,无论它是否符合您的意图。但在实践中,程序通常会假定数组对于所使用的索引来说足够大。因此,在您的情况下,它将查找索引 18 应该所在的内存(好像数组足够大),然后尝试将它在那里找到的字节解释为一些有意义的值。
现在,作为一般规则,内存可以有任何值,除非您将其设置为特定的值。通过初始化数组,您可以将每个数组元素的内存设置为一个确定的值 (0)。但刚好超过数组末尾的是您尚未设置的内存,因此这些字节可以是任何内容。在您的情况下,它们恰好以被解释为 -858993460 的方式设置,但这也可以是任何其他值。