'堆栈粉碎检测到abc2终止Aborted'循环数组时显示

时间:2016-04-18 09:00:52

标签: c++ arrays function for-loop ubuntu-14.04

当我尝试编译下面的代码终端时说stack smashing detected abc2 terminated Aborted (core dumped)。此错误显示for循环何时通过二维数组

我想要做的是使用cin>>arr[0][i];将用户输入添加到第一列,使用arr[i+1][r]=0;将其他列添加到0。

#include <iostream>

    using namespace std;

    void displayArray(int arr[][4],int row,int col);
    int main(){
    int arr[3][4];
    for(int i=0;i<4;i++){
            cout<<"enter value ";
            cin>>arr[0][i];
            for(int r=0;r<3;r++){
                    arr[i+1][r]=0;
            }
    }



            displayArray(arr,3,4);

            return 0;
    }

    void displayArray(int arr[][4],int row,int col){
            for(int i=0;i<row;i++){
                    for(int r=0;r<col;r++){
                            cout<<arr[i][r]<<" ";
                    }cout<<endl;
            }

    }

1 个答案:

答案 0 :(得分:2)

你超越了数组的界限:

int arr[3][4];
for(int i=0;i<4;i++){
 //...
   arr[i+1][r]=0; // <-- i+1 when i == 2 is going to give trouble
//...
}

如果i >= 2,您正在写入arr[3]arr[4]等。这是内存覆盖,然后行为将变为未定义。

显然,修复方法要么限制循环,以使i始终小于2,要么数组的第一个维度需要从2增加到更大的数字。