当我尝试编译下面的代码终端时说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;
}
}
答案 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增加到更大的数字。