1

我正在为图形程序编写 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();
    }
}
4

2 回答 2

2

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

于 2012-09-26T09:08:40.960 回答
1

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

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

于 2012-09-26T09:10:09.150 回答