首先,我的程序的目标是使用伙伴分配方案创建我自己的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);
}
}
答案 0 :(得分:1)
错误几乎说明了:您已将temporary
转换为与您尝试将其分配给的变量node
不同类型的指针。
对于 inccompatability 部分,通常有结构可以进入内存的规则(地址必须是4或8的倍数),但char
s不是这么受限制,因此您可以在char
不能存在的位置node
。
至于修复它:将其强制转换为合适的类型,并确保为node
生成有效地址。