具有多个循环的分段错误(核心转储)错误

时间:2015-07-08 15:01:43

标签: c loops coredump

我正在制作一个数独求解程序,但我在下面的函数中得到了分段错误(核心转储)错误。 在这个函数中,我试图在无法填充特定数字的地方填写-1。

有谁知道如何解决这个问题?

void check(int mat[9][9])
{
  int i, j, k, m;
  int num = 1;
  int top, left;

  while (num < 10) {
    for (i=0; i<9; i++) {
      for (j=0; j<9; j++) {
        if (mat[i][j] == num) {  

//--------- core dumped error occurs here-------------

          for (k=0; k<9; k++) {
            if (mat[i][k] == 0) mat[i][k] = -1;  // check row
            if (mat[k][j] == 0) mat[k][j] = -1;  // check column
          }

          top = (i/3)*3;
          left = (j/3)*3;
          for (k=0; k<3; k++) { 
            for (m=0; m<3; k++) { 
              if(mat[k+top][m+left] == 0) mat[k+top][m+left] = -1; // check square
            }
          } 

//------------------------------------------ 

        }
      }
    }

    // code abbreviation

    num++;
    }
  }

2 个答案:

答案 0 :(得分:1)

此:

      for (k=0; k<3; k++) { 
        for (m=0; m<3; k++) { 
对我来说,确实看起来很伤心/可疑。请注意,两个循环都会递增k,因此外部循环将永远不会迭代。我认为,内部将永远运行,并且由于读取全内存,肯定会触发无效访问。

答案 1 :(得分:1)

这一行是问题所在:

for (m=0; m<3; k++)  //<< notice incrementing 'k' rather than 'm'

它应该是:

for (m=0; m<3; m++)