繁体   English   中英

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

[英]vector subscript out of range,Debug assertion failed

我正在为图形程序编写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发生,因此很可能是向量为空。 但是,您无条件访问向量的第二个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM