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

Posted

技术标签:

【中文标题】c++错误:调试断言失败【英文标题】:c++ error: debug assertion failed 【发布时间】:2013-11-20 16:55:55 【问题描述】:

我正在尝试在 Visual Studio 2010 Pro 上运行该程序。 我可以成功编译它,但是当我运行程序时出现以下错误:

调试断言失败! 表达式:向量下标超出范围。

在这个简单的程序中,我试图计算整数向量中连续非 nul 数的最大和。

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;
int somme(vector<int> tab);

int main() 
vector<int> tab;
tab[0] = 2;
tab[1] = 3;
tab[2] = 0;
tab[3] = 0;
tab[4] = 4;
cout <<somme_consecutifs_max(tab) << endl;
return 0;


 int somme(vector<int> tab)
int sum(0);
int max(0);
for (int i = 0; i < tab.size(); ++i)
    if(tab[i] != 0) 
        sum += tab[i];
    
    else
        if(sum > max)
            max = sum;
        
        sum = 0;
    


    return max;

另一方面,为什么我不能在 Visual Studio 2010 中初始化我的 int 向量,原因如下:

vector<int> tab = 1, 2, 0, 0, 3;

【问题讨论】:

【参考方案1】:

当你这样做时

vector<int> tab;

您初始化一个大小为 0 的向量,您可以立即越界访问它。你需要

vector<int> tab(5);

制作一个大小为 5 的向量。或者,您可以将元素推回向量中,每次将大小增加一。

vector<int> tab;
tab.push_back(2);
tab.push_back(3);
....

【讨论】:

非常感谢,VS2010 中使用vector&lt;int&gt; tab = 1, 2, 0, 0, 3; 初始化向量怎么办?为什么这是不可能的? @GambaOsaca 我对 VS2010(或任何 VS)一无所知,但那是 C++11 语法,VS 的版本不太可能支持它。

以上是关于c++错误:调试断言失败的主要内容,如果未能解决你的问题,请参考以下文章

Visual C++ 查找导致“调试断言失败”的行

调试断言失败

调试断言失败

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

从发布模式更改为调试模式时出现“调试断言失败”错误

调试断言失败错误