C++ 是什么导致数组超出边界?

C++ 是什么导致数组超出边界?,c++,arrays,C++,Arrays,第二次迭代“第二次输入数字:”后,程序崩溃。我不明白为什么;它应该仍然在边界内 int arr1[3]; int arr2[3]; for(int i = 1; i < 6; i++) { if (i < 4) { cout << "enter number for first: "; cin >> arr1[i]; } else { cout << "ente

第二次迭代“第二次输入数字:”后,程序崩溃。我不明白为什么;它应该仍然在边界内

int arr1[3];
int arr2[3];
for(int i = 1; i < 6; i++)
{
    if (i < 4)
    {
        cout << "enter number for first: ";
        cin >> arr1[i];
    }
    else
    {
        cout << "enter number for second: ";
        cin >> arr2[i-4];
    }
}
int-arr1[3];
int-arr2[3];
对于(int i=1;i<6;i++)
{
if(i<4)
{
cout>arr1[i];
}
其他的
{
cout>arr2[i-4];
}
}
intarr1[3];
int-arr2[3];
对于(int i=0;i<6;i++)
{
如果(i<3)
{
cout>arr1[i];
}
其他的
{
cout>arr2[i-3];
}
}

尝试一下,由于数组的起始点为零,对于i=3,arr[3]=0,1,2

,因此当数组中的最高索引为2(三个索引:0,1,2)时,可以插入arr1[3]


将代码中的每4个替换为3。对于此值,最好使用常量

我相信您的代码中还有另一个东西:

for(int i = 1; i < 6; i++)
for(int i=1;i<6;i++)
这个循环只运行5次迭代,从1到5。现在,您永远不会写入arr1的第一个索引


从i=0开始。

数组是从0开始的索引,而不是从1开始的索引,正如您的代码所假定的那样。因此,
arr1
arr2
中的有效位置是0、1和2


将循环修改为从
for(inti=0;i运行让我们看看程序如何处理每个值

第一次迭代:

  • i=1
  • 如果测试为真1<4
  • cin至arr1[1]
  • 注意:跳过索引arr1[0]
第二次迭代:

  • i=2
  • 如果测试结果为真,则2<4
  • cin至arr1[2]
第三次迭代:

  • i=3
  • 如果测试为真,则3<4
  • 到ARR1(3)-这里是索引,超出了界限。C和C++中的数组是零的,所以数组的最大索引是数组的大小-1
我将在这里停止分析,因为这是你的错误部分,从现在起你应该会没事的


你也应该开始读一本关于C++的书,因为你在开始的时候失败了,以后会变得更大。你缺乏语言基础知识< /P>但是你知道数组是从0索引的,所以如果你有数组的大小3,那么你可以访问的最大索引是2。C++中的数组是零的。xes[0,1,2]。这个问题似乎离题了,因为它对所使用的语言甚至缺乏起码的知识。@Celeritas在i==3时,i<4,因此它试图访问超出范围的arr1[3]。Celeritas您知道可以从[0,2]生成两个for循环一个接受
arr1
而另一个接受
arr2
而不是条件,这将使您的代码更干净。回到原始问题。考虑到您正在尝试cin
arr1
arr2
3次,您应该从零开始循环,并将4改为3“将代码中的每4次替换为3”不起作用,因为只有两次提示用户为第一次输入值one@Celeritas看我的答案-你写的只是因为你从索引1而不是索引0开始循环!不要否决我的投票,不要说为什么。我提供了一个解决方案,上面的所有评论都可以让任何人找出问题所在。loop shou从“0”开始不是从“1”开始你保留了i=1,所以你错过了0个arr1的索引真的,你应该编辑你的答案…因为你只是忽略了第一个元素。Gasim,好吧,我没看到他这么做。只是复制了他惊人的代码并翻转了4
for(int i = 1; i < 6; i++)
i=0: enter number for first, stored in arr1[0]
i=1: enter number for first, stored in arr1[1]
i=2: enter number for first, stored in arr1[2]
i=3: enter number for second, stored in arr2[0]
i=4: enter number for second, stored in arr2[1]
i=5: enter number for second, stored in arr2[2]