2017-04-19 48 views
0

所以,我的結構是這樣的:動態內存

struct player{ 
char name[20]; 
int time; 
}s[50]; 

我不知道我是多麼很多玩家將添加到結構,我也必須使用動態內存此。那麼我怎麼能分配和重新分配更多的空間,當我添加一個播放器到我的結構? 我是一個沒有經驗的程序員,但我一直在搜索這個很長一段時間,我也不完全理解結構。 這個網站不接受我的問題,讓我們把更多的文字到這個職位

+0

獲得「可變」數量的「項目」的一個解決方案是實現[鏈接列表](http://cslibrary.stanford.edu/103/LinkedListBasics.pdf)。 – rwols

+0

這可能是最好的方式,但我幾乎完成了這個程序,我唯一需要的是將mallocing與此程序結合使用。 –

回答

0

我假設你是用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)); 

爲了加倍初始容量。

最後,永遠記住釋放請求的內存。