1

グラフィックプログラム用の C++ コードを書いていますが、後で解析するためにすべての座標を収集する必要があります。同じものにベクトルを使用しようとしていますが、次のエラーが返されます。

Debug Assertion failed
Program:....
File:....
Line 932
Expression:Vector subscript out of range

これが私のコードの一部です:

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

座標にプッシュする要素は1つだけなので、有効なインデックスは。だけです0coordinates[1]したがって、はベクトルの終わりを1つ過ぎたものです。

さらに、そこにあるものがpush_backまったく発生しないようにする可能性のある2つの条件があるため、ベクトルが空である可能性があります。ただし、無条件にベクトルの2番目の要素にアクセスします。

于 2012-09-26T09:10:09.150 に答える