我试图制作一个2D矩阵,用户选择两个尺寸的尺寸(即通过scanf分配dims []值),然后初始化它。
当我尝试使用函数将值赋值给char矩阵时,我的程序会编译但崩溃 我想它与列数(第二个括号)有关,而且我使用数组来定义矩阵二维的大小。仅在分配值时(而不是在打印时)才会出现此问题。
int main()
{
int dims[2] = {3,4};
//^The exact values are besides the point, chose some at random
char board[dims[0]][dims[1]];
initialize_board(board, dims);
}
该函数如下所示(MAX_SIZE #defined为25):
void initialize_board(char board[][MAX_SIZE], int board_side[])
{
for(int i=0; i<board_side[0]; i++)
{
for(int j=0; j<board_side[1]; j++)
{
board[i][j]='-';
}
}
}
该函数声明如下:
void initialize_board(char board[][MAX_SIZE], int board_side[]);
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
您的纸板尺寸为3 * 4 您的函数以start后面的25个条目的倍数访问该小板(对于内循环中的j> 0),即在条目号3 * 4后面的大约13个条目,即在索引11处的最后一个有效条目后面的14个。
答案 1 :(得分:1)
以下是如何正确地将可变长度数组(VLA)传递给函数。
void initialize_board(int m, int n, char board[m][n]) { ... }
int main ()
{
int m, n;
... // initialize m and n here
char board[m][n];
initialize_board(m, n, board);
}
当声明为自动变量时,VLA可能会很危险,因为当大小有点过大(几KB或MB,具体取决于您的操作系统和硬件)时,它们很容易导致程序崩溃。