我研究了數據結構和算法,並且我得到了動態二維數組的問題。這是我的代碼的一部分。編碼問題是騎士之旅。動態二維數組元素不能訪問幾個循環
int iMove[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
int jMove[8] = { 1, 2, 2, 1,-1, -2, -2, -1};
cell* cellList(int* i, int* j, int** board){
int k;
cell* temp;
int iTempNext; int jTempNext;
int maxSampleNum = 8;
int cnt = 0;
int val;
for(k = 0; k < maxSampleNum; k++){
iTempNext = (*i) + iMove[k];
jTempNext = (*j) + jMove[k];
//1. get list 0<=i<=7 && 0<=j<=7
if((0 <= iTempNext && iTempNext <= 7) && (0 <= jTempNext && jTempNext <= 7)){
//2. get the 0 value cells
//val = canMove(iTempNext, jTempNext, board);
printf("%d %d\n", iTempNext, jTempNext);
if(board[iTempNext][jTempNext] == 0){
cell tempCell;
tempCell.row = iTempNext;
tempCell.col = jTempNext;
temp = (cell*)realloc(temp, sizeof(cell));
*(temp+cnt) = tempCell;
cnt++;
}
}
}
return temp;
}
INT **板:2D陣列和我動態分配它並初始化該數組中的所有元素爲0。我印刷二維數組初始化之後。 問題是在第二個for循環之後,這個程序在訪問2d數組時遇到了分段錯誤。我無法在3rd for循環中訪問2d數組元素。
Initializing Complete...
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Enter the start position (i, j): 3 3
iTempNext jTempNext
1 4
2 5
4 5
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400b1c in cellList (i=0x7fffffffe5bc, j=0x7fffffffe5c0, board=0x603010) at main.c:144
144 if(board[iTempNext][jTempNext] == 0){
這是使用gdb後的結果。我怎樣才能解決這個問題
請發佈您的其他功能,並創建一個最小,完整且可驗證的示例。 – Magisch
'iMove [k]'和'jMove [k]',這些值來自哪裏? – CrakC
@ user3121023感謝您的建議。我得到的教訓是認真使用'realloc()'。我幾次'realloc'後檢查'temp'空間覆蓋了其他內存空間。我改變我的邏輯,以獲得預期的數組長度和'malloc()'它。 – JSKIM