[英]dynamic allocation of array of pointers to structs
我的程序中有2個結構。
id的鏈接列表和WORD
typedef struct related
{
int id;
struct related* next;
} RELATED;
typedef struct word
{
int id;
char name[NAME_LEN];
RELATED *related;
} WORD;
我想擁有一系列WORD,我希望它是動態的。
我有兩個單詞指針:
WORD* word1;
WORD* word2;
有價值的。
當我嘗試以這種方式動態分配它時:
WORD** arr = (WORD**)malloc(sizeof(WORD*)*10) // to hold 10 words
並嘗試向數組添加單詞,第一個正確添加,但第二個運行在第一個:
arr[0] = word1;
arr[1] = word2;
當我以這種方式定義數組時:
WORD* arr[40];
相同的單詞添加工作正常
arr[0] = word1;
arr[1] = word2;
無法找到這種動態分配的正確方法.. thnx求救!
而不是
// 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 **
malloc()
的結果。 type *p = malloc(sizeof(*p) * N);
樣式。 易於維護且不易出錯的IMO。 我找不到malloc()的任何問題,並使用指向WORD指針的指針作為數組。 有一點我可以指出,你沒有為word1和word2分配內存,它們擁有垃圾地址。 正在為arr [0]和arr [1]分配相同的垃圾地址。 如果您上傳完整的代碼,它將有助於找出確切的問題。
您可以使用以下代碼段來為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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.