gpt4 book ai didi

c - 如何在函数内 malloc 结构体数组?代码以其他方式工作

转载 作者:行者123 更新时间:2023-11-30 15:10:32 26 4
gpt4 key购买 nike

我正在尝试创建一个函数来创建可变大小的二维函数数组。我正在使用以下代码,它本身似乎工作得很好:

typedef struct
{
//Starter Properties
int TypeB;
int TypeF;
int TypeW;
//Randomized Properties
int RandB;
int RandF;
int RandW;
//Derived Properties
int Speed;
} MapTileData;

MapTileData **Map;

int i, x=5, y=5;

//Allocate Initial Space
Map = (MapTileData**)calloc(x, sizeof(MapTileData));

for(i = 0; i < x; i++)
{
Map[i] = (MapTileData*)calloc(y, sizeof(MapTileData));
}

所以上面的代码创建了一个二维结构体数组。我尝试将代码移动到函数中但不太成功,在尝试打印数组时出现段错误:

void CreateMap(MapTileData **Map, int xSize, int ySize)
{
//Variables
int i;

//Allocate Initial Space
Map = (MapTileData**)calloc(xSize, sizeof(MapTileData));

for(i = 0; i < xSize; i++)
{
Map[i] = (MapTileData*)calloc(ySize, sizeof(MapTileData));
}
}

代码中使用:

MapTileData **MapTile;

CreateMap(MapTile,5,5);

非常感谢任何和所有帮助!

最佳答案

在 C 中函数参数通过值传递,并且修改被调用者中的参数不会影响调用者的局部变量。

使用指针修改调用者的局部变量。

void CreateMap(MapTileData ***Map, int xSize, int ySize)
{
//Variables
int i;

//Allocate Initial Space
*Map = calloc(xSize, sizeof(MapTileData));

for(i = 0; i < xSize; i++)
{
(*Map)[i] = calloc(ySize, sizeof(MapTileData));
}
}

代码中的用法:

MapTileData **MapTile;

CreateMap(&MapTile,5,5);

替代方法:通过返回值传递分配的数组。

MapTileData **CreateMap(int xSize, int ySize)
{
//Variables
MapTileData **Map;
int i;

//Allocate Initial Space
Map = calloc(xSize, sizeof(MapTileData));

for(i = 0; i < xSize; i++)
{
Map[i] = calloc(ySize, sizeof(MapTileData));
}

//Return the value
return Map;
}

代码中的用法:

MapTileData **MapTile;

Maptile = CreateMap(5,5);

另请注意,他们说 you shouldn't cast the result of malloc() and its family in C .

关于c - 如何在函数内 malloc 结构体数组?代码以其他方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36075244/

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