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

标签 c arrays 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)

最佳答案

这行不通:

*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 .

关于c - 扫描到二维数组,然后将其传递给函数 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53949303/

相关文章:

javascript - SomeArray.sort ( function() { ... } ) 语句背后的逻辑是什么?

python - numpy.quantile 和 statistics.quantiles 计算不同。哪一个是真的?

c - 使用 FFI 的带有 size_t 的 printf

c - 用户输入C编程

c++ - 从文本文件中读取并将每个值存储在 C++ 中的单独数组中

java - 选择哪个 : 2D or 3D for a java game

c++ - 如何进行正确的 2d 网格到圆碰撞检测

java - 16x16 纹理太大,Java openGL

c - 重用 ANTLR3 词法分析器和解析器

C 菜单 - 否则