我不知道为什么在if statement
为0时我不输入此(temp->next)->next
。我也尝试将(temp->next)->next
投射到(void*)
,但它不起作用!
void Mem_Coalesce(){
list_t* temp;
temp = freep;
if( free_node_count == 2){
if( ((char*)temp + (temp->size) ) == (char*)(temp->next)){
printf("Entered if loop\n");
temp->size += (temp->next)->size;
temp->next = NULL;
free_node_count--;
}
}
else {
printf("\n coalescing the case that free list has 3+ nodes\n");
while(temp->next != NULL ){
if( ((char*)temp + (temp->size)) == (char*)(temp->next)){
if( (temp->next)->next == NULL){
temp->size += (temp->next)->size;
temp->next = NULL; //seg fault happens here
break;
}else{
temp->size += (temp->next)->size;
temp->next = (temp->next)->next;
((temp->next)->next)->prev = temp;
}
free_node_count--;
}
temp=temp->next;
}
}
}
这是我收到的具有seg错误的输出:
Addr of temp->next is 7f4a836ae2e8
Addr of temp->next->next is 0
./cmd.sh: line 5: 31230 Segmentation fault (core dumped) myprogram
我是否错误地将指针值与NULL进行了比较?
答案 0 :(得分:0)
我认为问题来自没有break
。 break
之后没有temp->next=NULL
。现在它已修复。