首页 > 解决方案 > 扫描到二维数组,然后将其传递给函数 - C

问题描述

如果我将函数分配为一维数组然后将其传递给函数,我的程序就会出现分段错误。它是为二维数组构建的。问题是,我不知道如何分配二维数组以及如何正确地将其传递给函数。希望一切都解释清楚。如果您知道出了什么问题,请尝试引导我以正确的方式修复它。非常感谢。这是代码:

int main()
{
    int i, j, size;

    scanf("%d", &size);
    int *a;

    //here i try to allocate it as 2d array
    *a = (int *)malloc(size * sizeof(int));
    for (i=0; i<size; i++)
    {
         a[i] = (int *)malloc(size * sizeof(int));
    }
    //here i scan value to 2d array
    for (i = 0; i < size; i++)
        for (j = 0; j < size; j++){
            scanf("%d", &a[i][j]); }

   //here i pass array and size of it into function
   if (is_magic(a,size))

函数头看起来像:

int is_magic(int **a, int n)

标签: carrays2d

解决方案


这不起作用:

*a = (int *)malloc(size * sizeof(int));

因为ahas typeint *所以*a有 type int,所以给它分配一个指针是没有意义的。您还试图取消引用尚未初始化的指针,调用未定义的行为

您需要定义aint **

int **a;

并在第一次分配时直接分配给它,sizeof(int *)用于元素大小:

a = malloc(size * sizeof(int *));

另请注意,您不应强制转换malloc.


推荐阅读