gpt4 book ai didi

c - 返回由malloc分配的数组

转载 作者:行者123 更新时间:2023-11-30 19:09:39 27 4
gpt4 key购买 nike

我在main.c中有代码:

 int main(void)
{
int* sudokuBoard = getBoard();
printBoard(sudokuBoard, 9);

return 1;
}

而且我在另一个文件中还有下一个代码:

 int* getBoard()
{
int i;
int **Board = (int**)malloc(9 * sizeof(int*));
for (i = 0; i < 9; i++)
{
Board[i] = (int*)malloc(9 * sizeof(int));
}
int prototype[9][9] =
{
{ 0,0,1,0,0,0,0,0,9 },
{ 0,3,0,0,0,0,5,4,0 },
{ 0,0,0,0,0,0,0,0,0 },
{ 0,0,0,2,0,0,0,8,0 },
{ 2,0,0,0,6,7,0,0,0 },
{ 0,0,0,0,0,0,0,1,0 },
{ 0,9,0,0,0,0,0,0,0 },
{ 0,0,0,9,0,0,2,0,0 },
{ 0,0,0,0,4,0,0,0,0 },
};

for (i = 0; i < 9; i++)
{
Board[i] = prototype[i];
}

return &Board[0][0];
}

void printBoard(int* arr, int size)
{
int i, j;
printf("BOARD:\n");
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
printf("%d ", *(arr + i*size + j));
}
printf("\n");
}
printf("\n----------------\n");
}

问题是当我尝试打印数组时(有奇怪的数字而不是数组值)。如何在一个函数中创建数组并将其返回到另一个函数然后打印它?

最佳答案

在这个循环中

for (i = 0; i < 9; i++)
{
Board[i] = (int*)malloc(9 * sizeof(int));
}

分配了 9 个内存区,指针 Board[i] 由它们的地址初始化。

在这个循环中

for (i = 0; i < 9; i++)
{
Board[i] = prototype[i];
}

指针被重新分配。因此,函数中存在内存泄漏。

此外,指针现在指向本地数组的元素,并且在退出函数后将无效。

您必须将本地数组的元素复制到新分配的数组,而不是重新分配指针。

此外,完全不清楚为什么您试图将函数声明为具有返回类型 int * 而不是正确的返回类型 int **

此外,由于数组的大小是固定的,您可以分配一个二维数组,例如

int ( *Board )[9] = malloc( int[9][9] ); 

关于c - 返回由malloc分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913989/

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