gpt4 book ai didi

c - 在 C 中返回一个数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:20 25 4
gpt4 key购买 nike

你好,我是 C 语言(和编程)的新手,我正在尝试创建一个返回动态分配数组的函数。看起来像:

int *returnArray(void) 
{
int i, *p[4];

for (i = 0; i < 4; i++)
if ((p[i]=(int *)malloc(sizeof(int)*(4-i))) == NULL)
return NULL;

return &p[0][0];
}

并调用这个函数:

int *ar;

if ((ar = returnArray()) == NULL) {
/* ERROR */
return 1;
}

但它根本不起作用。调用函数后,我希望像普通二维数组一样使用 *ar + 在程序结束时取消分配内存。即使我看过类似的主题,我也不知道如何解决它。

谢谢大家的帮助。我现在明白多了。

最佳答案

你很接近。您缺少的是您需要分配两个维度,如下所示:

int** CreateTwoDimensionalArray(int rows, int cols)
{
int row, prevrow;
int** result = (int**) calloc(rows, sizeof(int*));
if (result == NULL) {
return NULL;
}


for (row = 0; row < rows; ++row) {
int* current_row = (int*) calloc(cols, sizeof(int));
if (current_row == NULL) {
for (prevrow = 0; prevrow < row; ++prevrow) {
free(result[prevrow]);
}
free(result);
return NULL;
}
result[row] = current_row;
}
return result;
}

void FreeTwoDimensionalArray(int** array, int rows, int cols)
{
int row;
for (row = 0; row < rows; ++row) {
free(array[row]);
}
free(array);
}

关于c - 在 C 中返回一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21809530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com