'stack smashing detected abc2 terminated Aborted' 循环数组时显示
'stack smashing detected abc2 terminated Aborted' shows when looping an array
当我尝试编译以下代码时,终端显示 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;
}
}
您超出了数组的范围:
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 增加到更大的数字。
当我尝试编译以下代码时,终端显示 stack smashing detected abc2 terminated Aborted (core dumped)
。此错误显示 for 循环何时遍历 二维数组 。
我想要做的是使用 cin>>arr[0][i];
将用户输入输入第一列,使用 arr[i+1][r]=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;
}
}
您超出了数组的范围:
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 增加到更大的数字。