2016-01-11 24 views
0

我必須在C中創建一個Sudoku遊戲,併爲「撤消」功能我想複製第3個昏暗。數組到下一個。複製3 dim陣列本身

問題是我的程序崩潰,而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

ij的數獨的行和列。

這裏是調用:其一個簡單的開關指令,其中,當用戶按我的陣列的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; 

宣言是在我的主要功能的數獨應複製。

+4

什麼是'dim'?代碼「打破」時它的價值是什麼? –

+1

看起來你忘了初始化'dim',是嗎?只要'dim'具有有用的值,此代碼就應該可以工作。順便說一下,「代碼中斷」不是一個非常有用的錯誤報告。段錯誤? –

+0

對不起,我忘記了dim的值是用0聲明的。停止時的值也是0 – wurstburst

回答

1

這一行的註釋:

copydim(sudoku[z][9][9]); 

正在數獨數組的單個實例中傳遞單個字段。

Infact,一個超出數獨[] [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; 
} 
1

原來的copydim代碼完全沒有問題。

然而,它會崩潰,如果傳入的數組未分配(空),並威力崩潰,如果dimdim + 1落在陣列的界限之外。

錯誤在調用代碼中。

0

還有就是我犯的錯...... copydim的調用是錯誤的

copydim(sudoku[z][9][9]); 

它有河北copydim(sudoku);

感謝很多的嘗試:) 儘管,我學會了很多我怎麼也得寫我的問題在未來:d