C中的空指针比较

时间:2013-10-18 01:41:19

标签: c pointers null linked-list segmentation-fault

我不知道为什么在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进行了比较?

1 个答案:

答案 0 :(得分:0)

我认为问题来自没有breakbreak之后没有temp->next=NULL。现在它已修复。