2015-11-15 3 views
0

Чтобы начать, целью моей программы является создание моего собственного malloc с использованием схемы распределения контактов. Однако, когда я собираюсь скомпилировать свой код, я получаю инициализацию от несовместимой ошибки типа указателя. Я смущен тем, что именно это означает и как я могу это исправить. Вот короткий отрывок из функции, где происходит эта ошибка:C Ошибка: Инициализация с помощью несовместимого указателя

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

Просьба представить полный текст ошибки, в которой следует выделить линию, на которой оно происходит – Greg

ответ

1

Ошибка довольно много говорит об этом: вы бросили temporary быть другим типом указателя, чем переменная node, что вы пытаетесь присвоить его ,

Что касается несовместимым части, там, как правило, правила, где могут пойти Структуры памяти (адрес должен быть кратен обычно 4 или 8), но char s не так ограничены, и поэтому вам может иметь char в месте, где node быть не может.

Что касается фиксации: приведите его к соответствующему типу и убедитесь, что вы создаете действительный адрес для своего node.