【问题标题】:C++ Debug assertion failed. vector subscript out of rangeC++ 调试断言失败。向量下标超出范围
【发布时间】: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时无效

标签: c++ function class loops vector


【解决方案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 有什么想法吗?
猜你喜欢
  • 2016-02-14
  • 2016-05-02
  • 2017-06-18
  • 2021-12-22
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多