我在main()函数中声明了这个数组:
int VISITED[9][9]={{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,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0}};
它被传递给一个名为qneighbor的函数
qneighbor (5,5,1, 0, &pawn_positions, &PAWNS, WALLH, WALLV, &VISITED);
qneighbor签名看起来像这样:
CELL* qneighbor( int root_row, int root_col, int p, int dist, struct GameTable* PAWN_POSITIONS, int (*PAWNS)[9][9], int WALLH[8][9], int WALLV[9][8], int (*VISITED)[9][9]){...}
然而,在调试时,我看到在第五行之后,它被传递到qneighbor(在任何命令执行之前)之后立即被垃圾填满。可能出现什么问题?
答案 0 :(得分:1)
您的代码似乎没有特别的问题
顺便说一下,正如bcsanches所提到的,qneighbor
的参数int (*VISITED)[9][9]
是指向int[9][9]
的指针
为了访问其元素,VISITED
本身必须被称为
(*VISITED)[ i ][ j ]
。
如果你写VISITED[ i ][ j ]
,它代表一个指针,而不是一个int
因此,如果您编写printf( "%d", VISITED[i][j] )
来确认该值,则会打印出来
指针值(地址)作为int,它看起来像垃圾。
答案 1 :(得分:0)
数组索引超出范围
保持索引< 9
答案 2 :(得分:0)
您不需要使用指针来更改数组,数组是通过引用传递的,因此,请更改为:
CELL* qneighbor( int root_row, int root_col, int p, int dist, struct GameTable* PAWN_POSITIONS, int PAWNS[9][9], int WALLH[8][9], int WALLV[9][8], int VISITED[9][9]){...}
并使用:
调用它qneighbor (5,5,1, 0, &pawn_positions, PAWNS, WALLH, WALLV, VISITED);
在你的代码中,你实际上正在创建一个指针数组......