0

これは、1つのキャストで1人の俳優を削除するコードです。私は映画とそのキャストを結びつけています。したがって、このコードは映画が存在するかどうかをチェックし、キャストを探し、探している俳優が見つかると削除します。ただし、このコードは私には非常に合理的であるように見えますが、セグメンテーション違反が発生しています。理由は何でしょうか。この場合、セグメンテーション違反が発生しないように注意する必要がありますか?

4

2 に答える 2

1

その時点で

if( c-> next ->  name == actorFirstName && c -> next -> lastName == actorLastName)

c->next は NULL ではないと仮定していますが、ループは c が NULL でないことを保証するだけです。

于 2012-12-23T19:17:07.420 に答える
0

DrCが言ったように、「次」は間違っています。これを試して:

    void MovieDatabase:: removeActor( const string movieTitle, const string actorFirstName, const string actorLastName )
{
        for(Movie* m= headMovie; m != NULL;  m = m-> next){
               if(m-> title == movieTitle && m -> headCast !=NULL){
                        for(Cast* c = m -> headCast; c != NULL; c= c-> next){
                                if( c ->  name == actorFirstName && c -> lastName == actorLastName){
                                        Cast* temp = c-> next;
                                        delete c;
                                        c = temp;


                           }
                    }
            }
    }

}
于 2012-12-23T19:26:12.883 に答える