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

vector subscript out of range,Debug assertion failed

本文关键字:调试 断言 失败 范围 下标      更新时间:2023-10-16

我正在为图形程序编写C++代码,在其中我必须收集所有坐标以便以后解析它们。我正在尝试使用相同的向量,但返回以下错误:

调试断言失败
程序:。。。。
文件:。。。。
932
路 表达式:矢量下标超出范围

这是我代码的一部分:

std::vector<float> coordinates;
//random code
if(dnew >= 0)
{
   x = x + 1.0;
   glPointSize(1.5f);
   glColor3f(0.0,1.0,1.0);
   glBegin(GL_POINTS);
   glVertex2f(x, y);
   glEnd();
   dnew = dnew + a;
   if(t == 1)
   {
       coordinates.push_back (x);
   }
}
cout <<coordinates[1];

当我按重试时,它会带我到 stdthrow.cpp并指向以下行:

_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(const wchar_t *message, const     wchar_t *file, unsigned int line)
{
    // report error and die
    if(::_CrtDbgReportW(_CRT_ASSERT, file, line, NULL, message)==1)
    {
        ::_CrtDbgBreak();
    }
}

如果coordinates.size()<= i,则可能导致此错误,引发异常,为您提供您尝试访问向量边界外元素的信息

您只将一个元素推入坐标,因此唯一有效的索引是 0 。 因此,coordinates[1]是经过向量末端的一个。

此外,有两个条件可以阻止存在的一个push_back发生,所以很可能是,你的向量是空的。但是您可以无条件地访问向量的第二个元素。