扫描到二维数组,然后将其传递给函数-C

时间:2018-12-27 18:25:05

标签: c arrays 2d

如果我将函数分配为1D数组,然后将其传递给函数,则程序会出现分段错误。它是为2D数组构建的。问题是,我找不到如何分配2d数组以及如何将其正确传递到函数中。希望大家能清楚解释。如果您知道出了什么问题,请尝试引导我采用正确的方法进行修复。非常感谢。这是代码:

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)

2 个答案:

答案 0 :(得分:3)

这不起作用:

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

由于a的类型为int *,因此*a的类型为int,因此没有必要为此分配一个指针。您还尝试取消引用尚未初始化的指针,从而调用undefined behavior

您需要将a定义为int **

int **a;

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

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

还要注意you shouldn't cast the return value of malloc

答案 1 :(得分:1)

正在扫描2D数组?为此,您需要从a开始使用int**类型,而不仅仅是int*类型。对于例如

 int **a = malloc(NUM_OF_ROW * sizeof(int*)); /* allocate memory dynamically for n rows */

然后为每行分配内存,例如

for (i=0; i<size; i++){
    a[i] = malloc(NUM_OF_COLUMN * sizeof(int)); /* in each row how many column, allocate that much memory dynamically */ 
}