0

なぜこれif statementを入力しないのですか? (temp->next)->next0です。キャストも試しまし(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;

        }

    }



}

これは、セグフォルトのある出力です。

Addr of temp->next is  7f4a836ae2e8

Addr of temp->next->next is  0

./cmd.sh: line 5: 31230 Segmentation fault      (core dumped) myprogram

ポインター値と NULL の比較が間違っていませんか?

4

1 に答える 1

0

持っていないことから問題が発生すると思いますbreakbreak後はありませんでしたtemp->next=NULL。これで修正されました。

于 2013-10-18T02:26:09.053 に答える