SEG在非常复杂的(对我来说)程序中出错
seg fault in very complicated (for me) program
我最近接到了我的第一个"大"编程任务。我不得不用 c++ 设计一个扑克游戏。我已经完成了这个程序,当使用Visual Studio进行编译时,它工作得很好,但是当我把它带到学校使用的Linux服务器时,我遇到了一个seg错误。
我已经将 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
我看到您发布的代码的唯一问题是cardsToReplace[cardsToReplace.size()]
访问容器边界之外的元素。这导致了未定义的行为 - 可能会崩溃,可能会失败,或者它看起来好像宇宙中的一切都是正确的。像cardsToReplace[cardsToReplace.size() - 1]
这样的东西更合适。在像这样访问容器之前,您需要确保检查容器的大小以确保它有 1 个或多个元素,否则您最终会遇到同样的问题。
如果 cardToReplace[i]>任何 i 的 replaceHand.size(),那么这可能会导致问题,因为您正在调用 replaceHand.erase(replaceHand.begin() + cardToReplace[i])。
相关文章:
- 重载操作程序时出错>>用于类中的字符串 memebr
- 分段错误当我试图运行程序时出错
- 使用 Visual Studio 2019 构建 Hello World wxwidgets 应用程序时出错
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 修改气泡排序的程序出错
- 包含多维数组的程序出错
- 程序出错C++
- 检查完美的程序出错了
- 带有私有构造函数的程序出错
- LunarLander程序出错:符号未解析
- C++程序出错
- 结构:初始化程序出错
- 编译简单的应用程序出错
- 在树莓派上编译c++ opencv应用程序出错
- 链接基于Qt的应用程序出错
- 简单数学程序出错
- 具有未定义行为但从未实际执行的表达式是否会使程序出错
- 目录列表程序出错,c++
- Qt LNK2019 基本 Qt5 应用程序出错
- 我的简单阶乘计算器c++程序出错了吗?