首页 > 解决方案 > 将二维数组传递给 C 中的函数

问题描述

我正在尝试创建一个函数,在给定变量名称和行数和列数(在本例中为 n)的情况下初始化随机二维方阵。此代码返回“分段错误”错误,我不知道为什么。我尝试在函数 initM 中的 if-else 中使用 &,但随后返回“错误:需要左值作为赋值的左操作数”有人知道如何使其工作吗?

void initM (int n, int **matrix){
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            if (i == j) matrix[i][j] = 101;
            else matrix[i][j] = (rand() % 101);
        }
    }
}

void main (int argc, char *argv[]){

    int n = atoi(argv[1]);

    int **matrix = (int **)malloc(n*sizeof(int));
    for(int i = 0; i < n; i++) matrix[i] = (int *)malloc(n*sizeof(int));

    initM(n, matrix);
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    for (int i = 0; i < n; i++) free(matrix[i]);
    free(matrix);
}

标签: arrayscfunctionmultidimensional-array

解决方案


int **matrix = (int **)malloc(n*sizeof(int));

它应该是

int **matrix = malloc(n*sizeof(int*));

在您的架构中,它会发生这种情况sizeof(int)并且sizeof(void*)没有相同的值。

无需转换 malloc 的输出,因为 void* 可以正确地表现为任何其他指向对象的指针。


推荐阅读