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++ 调试断言失败。向量下标超出范围的主要内容,如果未能解决你的问题,请参考以下文章

调试断言失败(向量下标超出范围)

(opencv) 调试断言失败,向量下标超出范围

调试错误 - 向量下标超出范围 - PCL

如何在 Linux 上强制执行向量下标超出范围调试断言

调试断言失败,字符串下标超出范围

c++错误:调试断言失败