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

问题描述 投票:0回答:1

在尝试解决称为螺旋矩阵的问题时,我遇到了一个问题,即无法使用 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 malloc calloc
1个回答
1
投票

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

您想要将

calloc
的返回值分配给一个指针并返回该指针。另外,您调用
calloc
的方式不正确。第一个参数是元素的数量,第二个参数是每个元素的大小。

int *list = calloc(*returnSize, *sizeof(int));
return list;
© www.soinside.com 2019 - 2024. All rights reserved.