Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struct 结构中的动态内存_Struct_Malloc - Fatal编程技术网

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