如果我将函数分配为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)
答案 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 *));
答案 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 */
}