0

这是一个将在一个演员表中删除一个演员的代码。我在电影和他们的演员之间建立了联系。所以这段代码正在检查电影是否存在,然后它会查看它的演员表,当它找到我们正在寻找的演员时,它会删除它。然而,虽然这段代码对我来说似乎很合理,但我遇到了分段错误。可能是什么原因,在这种情况下我们应该注意什么,以免出现段错误?

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 回答