我的程序中有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求助!
答案 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 **
malloc()
的结果
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);
}
}