多个循环的分段错误(核心转储)错误
segmentation fault (core dumped) error with multiple loops
我正在制作一个数独解决程序,但我在下面的函数中遇到了分段错误(核心转储)错误。
在这个函数中,我试图在无法填写特定数字的地方填写-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++;
}
}
这个:
for (k=0; k<3; k++) {
for (m=0; m<3; k++) {
在我看来确实 broken/suspicious。请注意,两个循环都递增 k
,因此外部循环永远不会迭代。内部的将 运行 永远,我认为,并且肯定会由于读取整个内存而触发无效访问。
这一行是问题所在:
for (m=0; m<3; k++) //<< notice incrementing 'k' rather than 'm'
应该是:
for (m=0; m<3; m++)
我正在制作一个数独解决程序,但我在下面的函数中遇到了分段错误(核心转储)错误。 在这个函数中,我试图在无法填写特定数字的地方填写-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++;
}
}
这个:
for (k=0; k<3; k++) {
for (m=0; m<3; k++) {
在我看来确实 broken/suspicious。请注意,两个循环都递增 k
,因此外部循环永远不会迭代。内部的将 运行 永远,我认为,并且肯定会由于读取整个内存而触发无效访问。
这一行是问题所在:
for (m=0; m<3; k++) //<< notice incrementing 'k' rather than 'm'
应该是:
for (m=0; m<3; m++)