首先,我的程序的目标是使用好友分配方案创建我自己的malloc。然而,当我编译代码时,我会从不兼容的指针类型错误中获得初始化。我对这到底意味着什么以及如何修复它感到困惑
node *fList[26] = {NULL};
void *divider(int index, int baseCase) {
node *temporary = fList[index + 1];
int size = ((1 << (index + 6)) / 2);
node *toSplit =(char *)temporary + size; //where error occurs
if(temporary->next != NULL) {
fList[index+1] = temporary->next;
temporary->next= NULL;
fList[index+1]->previous = NULL;
}
else{
fList[index+1]=NULL;
}
temporary->next = toSplit;
toSplit->previous = temporary;
if(fList[index] != NULL){
toSplit->next = fList[index];
fList[index]->previous=toSplit;
}
else{
toSplit->next = NULL;
}
fList[index] = temporary;
temporary->previous=NULL;
temporary->header = index+5;
toSplit->header = index+5;
if(fList[index]->header == baseCase+5){
fList[index]->header |=128;
void *tmp = fList[index];
fList[index]=fList[index]->next;
if(fList[index]!=NULL)
{
fList[index]->previous=NULL;
}
return tmp;
}
else{
divider(index-1,baseCase);
}
}
错误几乎说明了这一点:您已经将temporary
强制转换为与您试图将其分配给的变量node
不同类型的指针。
至于不兼容性部分,结构在内存中的位置通常有规则(地址必须是通常为4或8的倍数),但char
不受限制,因此可以在node
不能所在的位置设置char
。
至于修复它:将其强制转换为正确的类型,并确保为node
生成有效的地址。