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

问题描述 投票:0回答:2

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

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

c arrays function matrix multidimensional-array
2个回答
2
投票

你的电路板尺寸为3 * 4。 您的函数以start后面的25个条目的倍数访问该小板(对于内循环中的j> 0),即在条目号3 * 4后面的大约13个条目,即在索引11处的最后一个有效条目后面的14个条目。


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

© www.soinside.com 2019 - 2024. All rights reserved.