我必须在C中创建一个数独游戏,然后撤消"撤消"功能我想复制前3个暗淡。阵列到下一个。
问题是我的程序在i=j=0
时分解,所以它甚至没有开始复制数组。
这就是我所拥有的:
void copydim(int sudoku[z][9][9])
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
sudoku[dim + 1][i][j] = sudoku[dim][i][j];
}
}
}
z
定义为10。
i
和j
是数独的行和列。
这是调用:它是一个简单的开关指令,当用户按下1时应该复制数独
case 49:
if (sudoku[dim][yvek][xvek] >= 0)
{
copydim(sudoku[z][9][9]); /*my debugger says that the sudoku array has the right values here, but in the next step when my programm switches into the copydim function there are no more values and an error occurs, although the pointer to the sudoku is the same as in this function :(*/
sudoku[dim][yvek][xvek] = 1;
editanzeige(sudoku, x, y);
}
break;
我的数组声明在我的主要功能中。
答案 0 :(得分:1)
您发布的原始copydim
代码没有任何问题。
但是,如果传入的数组未分配(null),它将崩溃,如果dim
或dim + 1
超出数组的范围,可能会崩溃。
错误在于调用代码。
答案 1 :(得分:1)
评论中的这一行:
copydim(sudoku[z][9][9]);
在sudoku数组的单个实例中传递单个字段。
Infact,一个在sudoku [] [9] [9]数组的单个实例边界之外的字段。这是未定义的行为,可能导致seg故障事件。
真正需要的是传递一个地址。
copydim( &sudoku );
建议:
#define MAX_ROWS (9)
#define MAX_COLS (9)
#define MAX_GAMEBOARDS (10)
struct gameboard
{
int rows[ MAX_ROWS ];
int cols[ MAX_COLS ];
};
// declare the array of gameboards with name `sudoku`
struct gameboard sudoku[ MAX_GAMEBOARDS];
int dim =0;
其中copydim()
原型为:
void copydim( struct gameboard * );
其中子函数由:
调用int main( void )
{
...
copydim(sudoku);
...
return 0;
}
答案 2 :(得分:0)
我犯了一个错误...... copydim的调用是错误的
copydim(sudoku[z][9][9]);
它必须是copydim(sudoku);
非常感谢尝试:) 尽管如此,我还是学到了很多如何在Future中写下我的问题:D