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