在非常复杂的(对我来说)程序中出现错误

时间:2014-11-28 18:48:28

标签: c++ class vector iterator segmentation-fault

我最近得到了我的第一个“大”编程任务。我不得不用c ++设计扑克游戏。我已经完成了程序,使用visual studio进行编译时效果很好,但是当我把它带到我学校使用的linux服务器时,我得到了一个段错误。

我已将seg故障缩小为两个函数,一个发布在pastebin(链接)上,另一个发布在下面。

void deckOfCards::replaceCards(vector<card> &replaceHand, vector<int> cardsToReplace)
{
int removeThis;
for(int i=0;i<cardsToReplace.size();i++)
{
    replaceHand.push_back(dealCard());
}

while(cardsToReplace.size())
{
    removeThis=cardsToReplace[cardsToReplace.size()-1];//furthest index to be removed, so index      that erase needs to remove stays correct
    replaceHand.erase(replaceHand.begin()+removeThis);
    cardsToReplace.pop_back();
    }


}

这是另一个功能。 http://pastebin.com/BiqJeHyR

2 个答案:

答案 0 :(得分:1)

我发布的代码唯一的问题是cardsToReplace[cardsToReplace.size()]正在访问容器边界之外的元素。这会导致未定义的行为 - 可能会崩溃,可能会失败,或者只是看起来像是在Universe中的所有内容都正常工作。像cardsToReplace[cardsToReplace.size() - 1]之类的东西更合适。你需要确保检查容器的大小,以确保它在访问之前有一个或多个元素,否则你最终会遇到同样的问题。

答案 1 :(得分:0)

如果cardToReplace [i]&gt;任何i的replaceHand.size(),然后这可能会导致问题,因为你正在调用replaceHand.erase(replaceHand.begin()+ cardToReplace [i])。