Я выполняю некоторые операции над связанным списком, которые включают в себя объединение любых узлов, имеющих freeflag == 1, но я получаю ошибку сегмента, когда обновляю значение следующего узла ... Я даже пытался установить tempptr->следующий равен нулю, и это все еще segfaults. Это не вызывает segfault, когда я удаляю строку: tempptr-> next = tempptr-> next-> next, так что я знаю, что эта строка вызывает проблемы. Был бы очень признателен за руководство .. спасибо.
size_t UpdateSize (metadataNode *node, metadataNode *nodetobeInherited, size_t metaSize){
size_t newSize = (node->sizeContained)+ (nodetobeInherited->sizeContained) + metaSize;
return newSize;
}
void myfree(void *freeptr, char* FILE, int LINE){
//if you try to free a null pointer throw error.=
if(freeptr == NULL){
fprintf(stderr, "Error in file:%s on line: Invalid pointer. You cannot free a null pointer. %d\n", FILE, LINE );
return;
}
void *lowerbound = (void*)(fakeHeap);
void *upperbound = (void*)(fakeHeap+4096);
if(freeptr <= upperbound && freeptr >= lowerbound){
metadataNode *UpdatedFreeNode = freeptr; // currently points to beginning of allocated memory.
--UpdatedFreeNode; // ptr now points to the MetaDataNode that contained info about the freed block. == UpdatedFreeNode = UpdatedFreeNode -sizeof(metadataNode);
UpdatedFreeNode->freeFlag=1; //free()ing so set free flag to 1;
size_t metadata = sizeof(metadataNode);
printf("freeflag changed \n");
metadataNode *tempptr = head;
// merge();
// scans through entire block to make sure there are no consecutive free blocks
while((tempptr->next)!=NULL){
printf("merge is beginning.\n");
if((tempptr->freeFlag) == 1 && (tempptr->next->freeFlag) == 1){
tempptr->sizeContained = UpdateSize(tempptr, tempptr->next, metadata);
tempptr->next=tempptr->next->next;
}
tempptr=tempptr->next;
}
}
//Did not give a valid ptr so return error.
else{
fprintf(stderr, "error in FILE: %s on line: %d: The pointer you passed was not valid.\n", FILE, LINE );
}
}