繁体   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