我可以为这个结构分配内存而不为其中的每个项目分配内存(在C中)吗?
typedef struct _game {
int grid[SIZE][SIZE];
int array[10];
Player player[MAX_PLAYERS];
int currentPlayer;
} game;
这些是在单独的头文件中(并且播放器是在与游戏相同的文件中实现的结构):
typedef struct _game *Game;
typedef struct _player *Player;
我只是想知道,当我创建一个新的游戏实例时,我是否需要为游戏中的每个玩家分配内存(使用calloc或malloc for exmaple)(4个玩家)?我认为,因为我已经在游戏结构中有一系列玩家(或指向玩家的指针)(并且这个数组大小没有改变),所以我只需要为游戏结构本身分配内存 . 是这样的吗?如何使用内存分配?具体如何与结构一起使用?我是否还需要为结构中的所有其他项分配内存?
2 回答
那么结构的设计方式,你需要分配个别玩家 .
解决方案-1
你会做的
然后你有
MAX_PLAYER
个_Player
指针变量 . 所以它会是这样的不鼓励在
typedef
下隐藏指针 . 这是一个不好的做法 . 此外,您需要检查malloc()
的返回值,并在完成后使用动态分配的内存 .你做了什么?
Player player[MAX_PLAYERS];
是指针数组,不是_player
变量数组 . 这就是为什么每个指针变量需要分配一些内存 . 这样您就可以将玩家数据存储到其中 .解决方案-2
你可以这样做:
然后分配10个玩家变量内存并将
malloc
返回的值分配给player
.解决方案-3
那么你不需要为玩家单独分配 . 它里面已经有
MAX_PLAYER
个struct _player
变量 .当你问起
typedef
时,你可以简单地这样做这样可以达到目的 - 并且可以避免输入
struct ...
,而且更易读和理解 .阅读清单
Is it a good idea to typedef pointers?
Is typedef'ing a pointer type considered bad practice?
我是否还需要为结构中的所有其他项分配内存?
不,结构中的所有项都将自动分配内存 .
这是分配的例子,它也清除结构内存: