0
所以,我的結構是這樣的:動態內存
struct player{
char name[20];
int time;
}s[50];
我不知道我是多麼很多玩家將添加到結構,我也必須使用動態內存此。那麼我怎麼能分配和重新分配更多的空間,當我添加一個播放器到我的結構? 我是一個沒有經驗的程序員,但我一直在搜索這個很長一段時間,我也不完全理解結構。 這個網站不接受我的問題,讓我們把更多的文字到這個職位
所以,我的結構是這樣的:動態內存
struct player{
char name[20];
int time;
}s[50];
我不知道我是多麼很多玩家將添加到結構,我也必須使用動態內存此。那麼我怎麼能分配和重新分配更多的空間,當我添加一個播放器到我的結構? 我是一個沒有經驗的程序員,但我一直在搜索這個很長一段時間,我也不完全理解結構。 這個網站不接受我的問題,讓我們把更多的文字到這個職位
我假設你是用C/C++編程。 你的struct player有靜態分配的字段,所以,當你使用malloc的時候,你需要一個20字節的字符數組a作爲一個整數。
我的建議是存儲一個變量(或者#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));
爲了加倍初始容量。
最後,永遠記住釋放請求的內存。
獲得「可變」數量的「項目」的一個解決方案是實現[鏈接列表](http://cslibrary.stanford.edu/103/LinkedListBasics.pdf)。 – rwols
這可能是最好的方式,但我幾乎完成了這個程序,我唯一需要的是將mallocing與此程序結合使用。 –