C错误:从不兼容的指针类型初始化

时间:2015-11-15 01:45:56

标签: c list pointers linked-list

首先,我的程序的目标是使用伙伴分配方案创建我自己的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);
    }
}

1 个答案:

答案 0 :(得分:1)

错误几乎说明了:您已将temporary转换为与您尝试将其分配给的变量node不同类型的指针。

对于 inccompatability 部分,通常有结构可以进入内存的规则(地址必须是4或8的倍数),但char s不是这么受限制,因此您可以在char不能存在的位置node

至于修复它:将其强制转换为合适的类型,并确保为node生成有效地址。