[英]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.