指针矩阵在代码中间取消引用

时间:2010-01-27 11:01:23

标签: c pointers

敲打我的脑袋1小时,找不到答案:

    int *get_possible_moves(int **board, int *w, int *h, int *x, int *y) {
 int movespossible=0;
 int moveslist[2][8];
 //4
 if(x + 1 <= w-1 && y + 2 <= h - 1) {
  if(board[*(int *)y + 2][*(int *)x + 1] == 0) {
   moveslist[movespossible][0] = *(int *)x + 1;
 breakpoint->    moveslist[movespossible][1] = *(int *)y + 2;
   movespossible++;
  }
 }

在标记断点的一行 - &gt;我的**板被取消引用。任何线索为什么会这样?没有并发线程在内存中使用此位置。另外,我在这条线上根本没有使用**板。

    //3
 if(x + 2 <= w - 1 && y + 1 <= h - 1) {
  if(board[*(int *)y + 1][*(int *)x + 2] == 0) {
   moveslist[movespossible][0] = *(int *)x + 2;
   moveslist[movespossible][1] = *(int *)y + 1;
   movespossible++;
  }
 }

此代码完美无瑕。

提前致谢!

2 个答案:

答案 0 :(得分:2)

你有:

int moveslist[2][8];

...但你经常提到它:

moveslist[movespossible][0]
moveslist[movespossible][1]

......你不应该这样做:

moveslist[0][movespossible]
moveslist[1][movespossible]

答案 1 :(得分:0)

好的,明白了。数组越界。

movespossible++完成两次后很快就会发生。

当数组超出范围时,它继续在随机存储空间中传播,最终击中电路板。