【发布时间】:2014-09-13 03:22:21
【问题描述】:
#include <stdio.h>
#include <conio.h>
#define GRID_X 30
#define GRID_Y 20
unsigned char board[GRID_Y][GRID_X];
void draw_board( unsigned char ** );
void print_board( unsigned char ** );
int main()
{
draw_board( board );
getch();
return 0;
}
void draw_board( unsigned char **board )
{
unsigned int r_itr = 0,
c_itr = 0;
if( NULL == board )
{
printf( "cannot create board..!!" );
exit(0);
}
r_itr = 0;
for( c_itr = 0; c_itr < GRID_X; ++c_itr )
{
board[ r_itr ][ c_itr ] = '+'; /* <- crashing here */
board[ r_itr + ( GRID_Y-1 ) ][ c_itr ] = '+';
}
c_itr = 0;
for( r_itr = 0; r_itr < GRID_Y; ++r_itr )
{
board[r_itr][c_itr] = '+';
board[ r_itr ][ c_itr + GRID_X-1 ] = '+';
}
print_board( board );
}
void print_board( unsigned char **board )
{
int r = 0,
c = 0;
for( r = 0; r < GRID_Y; ++r )
{
for( c = 0; c < GRID_X; ++c )
{
printf( "%c", board[r][c] );
}
printf("\n");
}
}
上面的代码在我通过评论提到的点崩溃(在此处崩溃)。 我做了所有可能的边界检查(根据我的理解),我仍然无法检测到崩溃的原因? 我使用了 GNU GCC 编译器和代码块 IDE。请帮忙?
【问题讨论】:
-
你的函数参数的数据类型不对。
board不是unsigned char **;它是一个数组数组。它们不是同义词。 -
当
board是全局变量时,为什么要将它作为参数传递给所有函数? -
我知道它很奇怪,但它实际上不是一个全球性的,我让它以一种简单的方式表达我的疑问。
-
很多 C 初学者认为数组在传递时会衰减为指针,但它只衰减一次,因此二维数组不会衰减为指向指针的指针。
标签: c