我正在为图形程序编写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();
}
}
答案 0 :(得分:2)
如果coordinates.size()<= i
引发此错误,则会引发异常,该异常会为您提供尝试访问元素超出向量范围的信息
答案 1 :(得分:1)
您只将一个元素推入坐标,因此唯一有效的索引是0
。因此,coordinates[1]
是向量的结尾。
此外,有两个条件可以阻止那里发生的那个push_back
发生,所以很可能,你的向量是空的。但是你无条件地访问了向量的第二个元素。