我最近得到了我的第一个“大”编程任务。我不得不用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
答案 0 :(得分:1)
我发布的代码唯一的问题是cardsToReplace[cardsToReplace.size()]
正在访问容器边界之外的元素。这会导致未定义的行为 - 可能会崩溃,可能会失败,或者只是看起来像是在Universe中的所有内容都正常工作。像cardsToReplace[cardsToReplace.size() - 1]
之类的东西更合适。你需要确保检查容器的大小,以确保它在访问之前有一个或多个元素,否则你最终会遇到同样的问题。
答案 1 :(得分:0)
如果cardToReplace [i]&gt;任何i的replaceHand.size(),然后这可能会导致问题,因为你正在调用replaceHand.erase(replaceHand.begin()+ cardToReplace [i])。