【发布时间】:2016-07-04 16:02:32
【问题描述】:
我正在尝试创建一个函数来创建可变大小的 2D 函数数组。我正在使用以下代码,它本身似乎可以正常工作:
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);
非常感谢任何和所有帮助!
【问题讨论】:
-
如果你做
void f(int i) {i = /* something */;},为什么不在函数外改i? -
无关,但
sizeof(MapTileData)在第一个calloc调用中应该是sizeof(MapTileData*)。 -
在函数内部分配“字符串”数组(实际上是
char的“二维数组”)或多或少是重复的:stackoverflow.com/q/25769443/694576
标签: c arrays function multidimensional-array struct