动态分配指向结构的指针数组

时间:2014-01-09 23:58:46

标签: c arrays dynamic struct malloc

我的程序中有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,我希望它是动态的。

我有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];

相同的单词添加工作正常

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

无法找到正确的动态分配方式.. thnx求助!

3 个答案:

答案 0 :(得分: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. 不建议在C。
  3. 中投射malloc()的结果
  4. 考虑type *p = malloc(sizeof(*p) * N);风格。易于维护且不易出错的IMO。

答案 1 :(得分:1)

我找不到malloc()的任何问题,并使用指向WORD指针的指针作为数组。有一点我可以指出,你没有为word1和word2分配内存,它们拥有垃圾地址。正在为arr [0]和arr [1]分配相同的垃圾地址。如果您上传完整的代码,它将有助于找出确切的问题。

答案 2 :(得分: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);

    }

}