我想在char**
内重新分配struct MotInfo**
,它是我创建的结构。但是当我尝试realloc
时出现错误:
int x;
MotInfo** hashtable = malloc(TAILLE*sizeof(struct MotInfo*));
for(x=0; x<TAILLE;x++)
{
hashtable[x] = NULL;
}
struct MotInfo* mot_info;
int i;
hashtable[5] = malloc(sizeof(struct MotInfo*));
mot_info = malloc(sizeof(struct MotInfo*));
mot_info->mot = "manger";
mot_info->urls = malloc(2*sizeof(char*));
mot_info->occurrences = malloc(2*sizeof(int));
mot_info->taille = 2;
for(i = 0;i<2;i++)
{
mot_info->urls[i] = "http://stackoverflow.com/questions";
mot_info->occurrences[i] = 3;
}
printf("OK\n");
hashtable[5] = mot_info;
hashtable[5]->urls = realloc(hashtable[5]->urls, sizeof(char*)*2);
我已将最后一行中的错误本地化,但我有这个错误:
realloc(): invalid pointer:
答案 0 :(得分:4)
struct MotInfo* mot_info;
mot_info = malloc(sizeof(struct MotInfo*));
mot_info
是指向struct MotInfo
的指针,但是你分配的空间只足以容纳一个指针,而不是结构(由于它至少有四个成员,它可能更大)。当你超越分配时,你可能会踩踏malloc的簿记。
hashtable[5] = malloc(sizeof(struct MotInfo*)); // (a)
mot_info = malloc(sizeof(struct MotInfo*));
hashtable[5] = mot_info; // (b)
(b)上的分配丢失指向(a)分配的块的指针。
mot_info->urls = malloc(2*sizeof(char*));
hashtable[5] = mot_info;
hashtable[5]->urls = realloc(hashtable[5]->urls, sizeof(char*)*2);
我也不明白这一点,你是不是realloc
大小相同?
即使没有,你可能也不应该立即将realloc
的返回值分配给同一个指针:如果realloc
失败,它会丢失指向内存块的指针。
答案 1 :(得分:0)
你做过hashtable[5] = malloc(sizeof(struct MotInfo*))
但hashtable[5]
本身就是指向struct MotInfo
的指针,所以你可能会做hashtable[5] = malloc(sizeof(struct MotInfo))