使用函数将值分配给矩阵时,C程序崩溃

时间:2017-12-26 08:33:11

标签: c arrays function matrix multidimensional-array

我试图制作一个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[]);

我该怎么做才能解决这个问题?

2 个答案:

答案 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,具体取决于您的操作系统和硬件)时,它们很容易导致程序崩溃。