使用calloc分配内存

时间:2016-09-25 12:25:14

标签: c

我想将我的大型2D数组初始化为零。 如果我通过calloc分配内存,它会自动将所有单元格初始化为零。 是否可以使用单个calloc函数为2D数组分配内存? 谢谢

2 个答案:

答案 0 :(得分:1)

如果您希望能够使用[]运算符访问矩阵元素,则必须首先分配一个中间结构,该结构包含指向存储在矩阵每行上的数据的指针。

每一行都将归零,因为它们是使用calloc()分配的。这是你在找什么?

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    int **a;
    unsigned int num_rows = 2000;
    unsigned int num_columns = 190;

    a = calloc(num_rows, sizeof(*a));
    if (a == NULL) {
        /* TODO: Error handling. */
        return -1;
    }

    for (unsigned int i = 0; i < num_rows; i++) {
        a[i] = calloc(num_columns, sizeof(**a));
        if (a[i] == NULL) {
            /* TODO: Error handling. */
            return -1;
        }
    }

    printf("%d\n", a[0][0]);

    /* TODO: Free calloc'd memory. */    

    return 0;
}

答案 1 :(得分:-3)

int nrows = 2000, ncolumns = 190;

int **a=calloc(nrows * ncolumns, sizeof(a));

printf("%d", a[0][0]);