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

时间:2012-09-26 09:04:14

标签: c++ visual-c++

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

  

Debug Assertion失败
  计划:....
  文件:....
  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();
    }
}

2 个答案:

答案 0 :(得分:2)

如果coordinates.size()<= i引发此错误,则会引发异常,该异常会为您提供尝试访问元素超出向量范围的信息

答案 1 :(得分:1)

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

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