我应该如何在函数中使用 calloc 初始化数组?

How am I supposed to initialize a array using calloc inside a function?

提问人:Harshit Singh 提问时间:8/10/2023 更新时间:8/14/2023 访问量:65

问:

在尝试解决称为螺旋矩阵的问题时,我遇到了一个问题,即我无法使用 calloc 初始化函数内部的数组。

/*
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
    *returnSize = matrixSize * matrixColSize[0];
    int list[] = calloc(0, (*returnSize)*sizeof(int));
    return list;

}

在尝试编译时,我遇到了这个异常,有人可以解释为什么会发生这种情况吗?

solution.c: In function ‘spiralOrder’
Line 6: Char 18: error: invalid initializer [solution.c]
     int list[] = calloc(0, (*returnSize)*sizeof(int));
                  ^~~~~~
C 卡洛克

评论


答:

3赞 dbush 8/10/2023 #1

数组需要初始值设定项列表来初始化它们。但在这种情况下,您实际上并不需要数组,因为一旦函数返回,返回指向本地内存的指针将无效。

您希望将 的返回值分配给指针并返回该指针。此外,您拨打了错误。第一个参数是元素的数量,第二个参数是每个元素的大小。calloccalloc

int *list = calloc(*returnSize, sizeof *list);
return list;

评论

0赞 Harshit Singh 8/10/2023
为什么要使用 *sizeof(int)?
0赞 tstanisl 8/10/2023
s/*sizeof(int)/sizeof *list
0赞 Jean-Baptiste Yunès 8/11/2023
@HarshitSingh矩阵应该存储 int,而 calloc 分配字符,因此您需要分配 *returnSize 元素,每个元素的大小都与 int 的大小相同。