结构中的动态内存

时间:2017-04-19 12:33:58

标签: struct malloc

所以,我的结构是这样的:

 $scope.login = function () {
        authService.login($scope.loginData).promise.then(function (response) {
            if (document.referrer != "" && document.referrer != window.location.href) {
                window.location.href = document.referrer;
            }
            else {
                window.location.href = "/Roles/Index"
            }
        }
    };

我不知道有多少玩家要添加到结构中,我也必须使用动态内存。那么当我将一个播放器添加到我的结构中时,如何分配和重新分配更多空间呢? 我是没有经验的程序员,但我一直在谷歌搜索这个很长一段时间,我也不完全理解结构。 这个网站不接受我的问题,所以让我们在这篇文章中添加更多文字

1 个答案:

答案 0 :(得分:0)

我假设您使用C / C ++进行编程。 你的struct player有静态分配的字段,因此,当你在它上面使用malloc时,你需要为一个整数提供20字节字符数组的空间。

我的建议是在变量(或#define符号)中存储您可以接受的初始结构数。然后,使用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;
}

此时,如果您获得运行时的玩家数量超过初始容量,您还应该考虑重新分配内存。您可以使用:

players = (struct player*) realloc(2 * init_cap * sizeof(struct player));

为了使初始容量加倍。

最后,请务必记住释放所请求的内存。