2013-02-22 92 views
1

對於本週在CS類中的任務,我們必須修改我們當前的程序,爲所有數組動態分配內存。我們必須確保沒有內存浪費在空元素上。我們必須通過賦值給字符數組來執行此操作,檢查temp的大小,然後分配一個這樣大小的數組。如何在結構內動態分配內存?

反正,我不明白如何使用結構做。我知道如何動態分配內存,例如

int* pointer = new int(5); 

但是,我該如何做結構成員?這似乎是,除非您事先定義了大小,否則當您聲明該類型的結構時,計算機不知道要分配多少空間。

現在,我的結構定義是,像這樣:

struct card 
    { 
    char rank[10]; 
    char suit[10]; 
    char color; 
    bool dealt; 
    char location[12]; 
    }; 

如何更改動態地聲明的所有陣列,而不指定大小?

+0

你知道如何訪問一個結構裏面的變量? – 2013-02-22 05:11:17

+0

no @ user1362548'deck1.color ='A'' – 2013-02-22 05:12:38

+0

@ user1362548現在將所有數組改爲指針。然後訪問它內部的每個指針並命令分配內存。 – 2013-02-22 05:13:38

回答

3
struct card 
{ 
    char* rank; 
    char* suit; 
    char color; 
    bool dealt; 
    char* location; 
}; 

編譯器不需要知道您分配的大小,因爲所有此結構將存儲的是指向分配的內存的指針。

指針的大小,因此該結構,如果分配1個元素的每一個或每1000元件將是相同的。

card c; 
c.location = new char[10]; 

p.s.只是檢查,你是否知道下面的代碼分配了1個元素,並將其設置爲5,而不是分配5個元素?請參閱wikipedia瞭解兩種用法之間的區別。

int* pointer = new int(5); 
+0

謝謝,只需要知道它是如何在幕後工作的,並且您的描述是有意義的。 – Bobazonski 2013-02-22 05:15:11

+0

@ user1362548請閱讀最後幾行,您代碼中可能存在的錯誤。 – 2013-02-22 05:18:38

4
struct card 
    { 
    char *rank; 
    char *suit; 
    char color; 
    bool dealt; 
    char *location; 
    }; 

只要看看裏面的結構指針和動態分配內存給他們,不要忘記使用後釋放他們..

1

使用一個char *的等級?當你使用它時,card-> rank = malloc(sizeof(char)* size)?

0

在你不需要改變你的結構變量,只是改變你怎麼稱呼它使用的typedef任何情況下:

typdef struct _CARD 
    { 
    char rank[10]; 
    char suit[10]; 
    char color; 
    bool dealt; 
    char location[12]; 
    } CARD; 

要初始化卡的使用數組:

CARD* card; 
#define ARRSIZE 12 

card = (CARD*)malloc(sizeof(CARD)*ARRSIZE); 

欲瞭解更多的動態結構分配,使用通過調用結構本身作爲一個指針鏈表: typdef結構_CARD

typdef struct _CARD { 
    char rank[10]; 
    char suit[10]; 
    char color; 
    bool dealt; 
    char location[12]; 
    struct _CARD *_next; 
    } CARD; 

,並根據需要設置每結構和使用_next指針將它們綁定:

CARD *card,*tmp,*final,*first,*etc; 
    card = (CARD*)malloc(sizeof(CARD)); 
    tmp= (CARD*)malloc(sizeof(CARD)); 
    card->_next = tmp; 
    final = (CARD*)malloc(sizeof(CARD)); 
    tmp->_next = final; 
    final->_next = NULL; 

等等,你需要有額外的功能來管理動態創建的結構和他們的債券。