我如何在函数内malloc结构数组? 代码另有工作

我正在尝试创建一个创建可变大小的2D funct数组的函数。 我正在使用以下代码,它似乎可以自行工作:

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)); } 

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

 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中通过值传递,在callee中修改参数不会影响调用者的局部变量。

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

 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)); } } 

用法代码:

 MapTileData **MapTile; Maptile = CreateMap(5,5); 

还要注意,他们说你不应该在C中malloc()及其族 。