首页 > 解决方案 > 是否可以使用 calloc() 一次在 c 中动态分配二维数组?

问题描述

我在网上看到的所有解决方案都使用了两次 calloc() 函数,是否可以只使用一次?下面的代码没有打印正确的数组元素

int **ptr;

//To allocate the memory 
ptr=(int **)calloc(n,sizeof(int)*m);

printf("\nEnter the elments: ");

//To access the memory
for(i=0;i<n;i++)
{  
 for(j=0;j<m;j++)
 {  
  scanf("%d",ptr[i][j]);
 }
}

标签: cmultidimensional-arraydynamic

解决方案


从 C99 开始,您可以使用指向 VLA(可变长度数组)的指针:

int n, m;

scanf("%d %d", &n, &m);

int (*ptr)[m] = malloc(sizeof(int [n][m]));

for (i = 0; i < n; i++)
{  
    for (j = 0; j < m; j++)
    {  
        scanf("%d", &ptr[i][j]); // Notice the address of operator (&) for scanf
    }
}
free(ptr); // Call free only once

推荐阅读