簡體   English   中英

動態分配指向結構的指針數組

[英]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 **
  1. C亂碼↔英語可能有用。
  2. 在C中不鼓勵生成malloc()的結果。
  3. 考慮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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM