#include <iostream>
using namespace std;
int main()
{
int arr[40] = {1,2,0,3,4,0,5,6,0,7,8,0,9,10,0,11,12,0,13,14,0,15,16,0,17,18,0,19,20,0,21,22,0,23,24,0,25,26,0,27};
int i;
int mat[27][27];
//initilizing all cells of the matrix to zero
for(int a=0 ; a<27 ; a++)
{
for(int b=0 ; b<27 ; b++)
{
mat[a][b]=0;
}
}
//initilizing specific matix cells to 1
for(int i=0 , j=1 ; j<39 ; j++)
{
if((j+1)%3 == 0)
{
j=j+2;
i=i+3;
mat[i][j]=1;
/*cout<<arr[i]<<" "; //Print array element
cout<<arr[j]<<" ";*/
continue;
}
mat[i][j]=1;
/*cout<<arr[i]<<" "; //Print array element
cout<<arr[j]<<" ";*/
}
//displaying matrix
for(int c=0 ; c<27 ; c++)
{
for(int d=0 ; d<27 ; d++)
{
cout<<mat[c][d]<<" ";
}
cout<<endl;
}
return 0;
}
答案 0 :(得分:2)
您的矩阵定义为int mat[27][27]
,但在您的循环中j可以是&gt; 26(例如你的循环转到j < 39
),这是超出界限的。
答案 1 :(得分:0)
正如Eyal Cinamon和其他人所提到的,你的循环第二个循环超出范围,你就会进行分割。
避免此错误的常用方法是将数组边界置于常量
中const int MAT_MAX = 27;
int mat[MAT_MAX][MAT_MAX];
for (int i = 0, j = 1; j < MAT_MAX; j++)
{
...
}
另外,作为一个挑剔,通常最好养成使用前缀增量(++j
)来增加迭代器的习惯。智能编译器可以围绕它进行优化,但这是一个好习惯。