gpt4 book ai didi

C 在函数中动态分配二维数组并返回指针

转载 作者:行者123 更新时间:2023-12-01 16:02:01 25 4
gpt4 key购买 nike

我想调用一个带有一些参数的函数,并在该函数内分配一个2D数组,然后将指向它的指针传递回main。这不是我正在使用的实际代码,而是一个简化的“玩具”代码来解释我正在尝试的内容。我遇到了段错误,但我不太明白为什么。我以前做过类似的事情,我认为这会起作用。知道我搞砸了什么吗?

void func(int val, int ** array);
int main()
{
int **array;
int i = 2;

func(i,array);

// do some stuff with info from array[i][2]

free(array);
}

void func(int val, int **array)
{

// do some calculation here to find the row size for array

array = malloc(row_size*sizeof(int *));
for (i = 0; i < row_size; i++)
array[i] = malloc(2* sizeof(int));

// fill the 2d array with some values


}

最佳答案

您需要将指针传递给 int **array; 指针。因此,func 将采用 int ***arrayp 参数。修改代码如下:

void func(int rows, int ***arrayp);
int main()
{
int **array;
int rows = 2;

func(rows, &array);

// do some stuff with info from array[rows][2]

free(array);
}

void func(int rows, int ***arrayp)
{
// do some calculation here to find the row size for array
*arrayp = malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++)
(*arrayp)[i] = malloc(2 * sizeof(int));

// fill the 2d array with some values
}

另一种方法是更改​​ func 原型(prototype),以返回它分配的int **array

分配只有 2 个 int 的子数组似乎很愚蠢。您打算使这些子数组动态化吗?然后,您需要跟踪它们分配的大小。

关于C 在函数中动态分配二维数组并返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30681221/

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