我想将2D数组的特定单元格初始化为1.但是我的程序一直在崩溃

时间:2017-12-13 19:36:48

标签: c++ arrays

#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;
}

2 个答案:

答案 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)来增加迭代器的习惯。智能编译器可以围绕它进行优化,但这是一个好习惯。