Struct 结构中的动态内存
我的结构是这样的:Struct 结构中的动态内存,struct,malloc,Struct,Malloc,我的结构是这样的: struct player{ char name[20]; int time; }s[50]; 我不知道我要向结构中添加多少玩家,我还必须为此使用动态内存。那么,当我向结构中添加一个播放器时,如何分配和重新分配更多的空间呢? 我是一个没有经验的程序员,但我已经在谷歌上搜索了很长一段时间,我也不完全理解结构。 这个网站不接受我的问题,所以让我们在这篇文章中添加更多的文字我假设你是用C/C++编程的。 struct player具有静态分配的字段,因此,当您在其上使用mal
struct player{
char name[20];
int time;
}s[50];
我不知道我要向结构中添加多少玩家,我还必须为此使用动态内存。那么,当我向结构中添加一个播放器时,如何分配和重新分配更多的空间呢?
我是一个没有经验的程序员,但我已经在谷歌上搜索了很长一段时间,我也不完全理解结构。
这个网站不接受我的问题,所以让我们在这篇文章中添加更多的文字我假设你是用C/C++编程的。 struct player具有静态分配的字段,因此,当您在其上使用malloc时,您需要为一个整数的20字节字符数组请求空间 我的建议是将您可以接受的结构的初始数量存储在一个变量(或#定义一个符号)中。然后,使用malloc分配包含这些结构的静态数组。 此外,你还必须考虑一种策略,以存储即将到来的新玩家。最简单的方法是使用一个索引变量来存储最后一个空闲位置,并使用它来添加该位置 下面是一个简短的例子:
#define init_cap 50
struct player {
char name[20];
int time;
};
int main() {
int index;
struct player* players;
players = (struct player*) malloc(init_cap * sizeof(struct player));
for(i = 0; i < init_cap; i++) {
strcpy(players[i].name, "peppe");
players[i].time = i;
}
free(players);
return 0;
}
以使初始容量加倍
最后,始终记得释放请求的内存。获得“可变”数量的“项”的一个解决方案是实现一个。这可能是最好的方法,但我几乎完成了这个程序,我唯一需要的是将mallocing与这个程序结合起来。
players = (struct player*) realloc(2 * init_cap * sizeof(struct player));