2014-01-09 178 views
0

我的程序中有2個結構體。指向結構的指針數組的動態分配

連接ID的列表,以及一個WORD

typedef struct related 
{ 
    int id; 
    struct related* next; 
} RELATED; 

typedef struct word 
{ 
    int id; 
    char name[NAME_LEN]; 
    RELATED *related; 
} WORD; 

我想抱着單詞的數組,我希望它是動態的。

我有2個指針的話:

WORD* word1; 
WORD* word2; 

與值。

當我試着動態分配它是這樣的:

WORD** arr = (WORD**)malloc(sizeof(WORD*)*10) // to hold 10 words 

,並試圖將一個單詞添加到一個數組,第一個是正確添加,但在第一個,第二個運行:

arr[0] = word1; 
arr[1] = word2; 

當我在定義數組是這樣的:

WORD* arr[40]; 

詞w的相同的附加orks就好了

arr[0] = word1; 
arr[1] = word2; 

找不到這個動態分配的正確方法.. thnx求助!

+0

[似乎爲我工作的罰款?](http://codepad.org/hkAq33CV)(是的,不free'ing內存,罰款爲此,雖然) – ccKep

+0

應該做工精細,可你分享你的程序代碼? – iGRJ

回答

1

不是

// arr as pointer to pointer to WORDS 
WORDS** arr = (WORDS**)malloc(sizeof(WORDS*)*10); 

分配

// arr as pointer to WORDS 
WORDS* arr = malloc(sizeof(*arr) * 10); // WORDS *, not WORDS ** 
  1. C gibberish ↔ English可能是有用的。
  2. 鑄造malloc()的結果是不鼓勵在C.
  3. 考慮type *p = malloc(sizeof(*p) * N);風格。易於維護且不易出錯IMO。
+0

對不起,我重新說明了我的問題,使其更清晰 –

+0

什麼是不明確的是評論「持有10個字」。你的'malloc()'持有10個指向WORDS的指針。此外,你是否簡單地想複製指針'word1,word2'或他們指向的日期? – chux

+0

@Andrey Chasovski你是如何確定的「但第二個跑了第一個」?隨着您編輯的信息,它_appears_你正在做的事情 - 需要更多的信息。 – chux

1

我找不到malloc()的任何問題,並使用指向WORD指針的指針作爲數組。有一點我可以指出,你沒有爲word1和word2分配內存,他們擁有一個垃圾地址。相同的垃圾地址正被分配給arr [0]和arr [1]。如果您上傳完整的代碼,它將有助於找出確切的問題。

0

可以使用下面的代碼段進行動態存儲器分配用於2D陣列:

讓「m」和「n」是一個陣列的尺寸。

WORDS** arr = (WORDS**)malloc(sizeof(WORDS*)*m); 

for(int i = 0 ; i < m ; i++) 

{ 

    for(int j = 0 ; j < n ; j++) 

    { 

     arr[i] = (WORDS*)malloc(sizeof(WORDS)*n); 

    } 

}