C++ 调试断言失败。向量下标超出范围
Posted
技术标签:
【中文标题】C++ 调试断言失败。向量下标超出范围【英文标题】:C++ Debug assertion failed. vector subscript out of range 【发布时间】:2016-03-05 01:24:36 【问题描述】:我一直在寻找解决方案,我似乎正在修复他们的所有问题,但我的仍然无法正常工作。
以下代码显示来自名为 Creature 的类的向量,对向量进行排序,然后显示排序后的向量。
// displaying the unsorted vector
for (int i = 0; i < MAX_NO_CREATURES; i++)
if (creatures[i].getAlive() != 0) // checking to see if a creature exists
for (unsigned int j = 0; j < creatures[i].getAvaFood().size(); j++)
cout << creatures[i].getAvaFood()[j] << " ";
//sorting the vector
for (int i = 0; i < MAX_NO_CREATURES; i++)
if (creatures[i].getAlive() != 0) // checking to see if a creature exists
creatures[i].bubbleSort(creatures[i].getAvaFood()); // calling a sorting function from creatures[i] passing in the relevant vector (its own.. wait what?)
cout << endl;
// displaying the sorted vector
for (int i = 0; i < MAX_NO_CREATURES; i++)
if (creatures[i].getAlive() != 0) // checking to see if a creature exists
for (unsigned int x = 0; x < creatures[i].getAvaFood().size(); x++)
cout << creatures[i].getAvaFood()[x] << " ";
当我在错误窗口上单击重试时,Visual Basic 将我带到生物类中的这一行。特别是 IF 语句。
void Creature::bubbleSort(vector<int> &v)
bool swapped = true;
int temp;
while (swapped)
swapped = false;
for (unsigned int i = 0; i < v.size(); i++)
if (v[i] > v[i + 1])
temp = v[i];
v[i] = v[i + 1];
v[i + 1] = temp;
swapped = true;
【问题讨论】:
v[i+1]
在i == v.size() - 1
时无效
【参考方案1】:
for (unsigned int i = 0; i < v.size(); i++)
if (v[i] > v[i + 1])
for
允许 i
为所有值 [0, v.size) 这意味着您将测试无效的 v[v.size]。
将你的 for 循环更改为
for (unsigned int i = 0; i < v.size() - 1; i++)
您需要添加一个检查以确保 v.size() 不为零。
【讨论】:
非常感谢您的反馈!该程序现在运行,但是就像你说的那样,我必须检查 v.size() 是否不为零。然而,当 v.size() 对于程序应该运行的所有向量不为零时,它应该使用冒泡排序函数按升序排序。事实并非如此,向量没有得到排序,我又不知所措了:S 有什么想法吗?以上是关于C++ 调试断言失败。向量下标超出范围的主要内容,如果未能解决你的问题,请参考以下文章