0

ステレオ キャリブレーションでデバッグを実行しているときに、アクセス違反エラーが発生します

コードは次のとおりです

  for(int j=0;j<n;j++){    
                       cornersR[j]=cvPoint2D32f(cornersRp[j].x,cornersRp[j].y);
                       cornersL[j]=cvPoint2D32f(cornersLp[j].x,cornersLp[j].y);
                       }

これらは次のように初期化されます。n は固定整数です。

           CvPoint2D32f* cornersRp = new CvPoint2D32f[ n ];
           CvPoint2D32f* cornersLp = new CvPoint2D32f[ n ];
           vector<CvPoint2D32f> cornersR;
           vector<CvPoint2D32f> cornersL;

私を助けてください.....

4

1 に答える 1

6

使用するには、そのインデックスに要素があるvector[]ことを確認する必要があります。vectorこの場合、両方のベクトルが空であるため、アクセス違反が発生します。

宣言を次のように変更します。

vector<CvPoint2D32f> cornersR(n);
vector<CvPoint2D32f> cornersL(n);

これによりvectorsnデフォルトで構築された のインスタンスが読み込まれますCvPoint2D32f

デフォルトのコンストラクターがない場合は、次のCvPoint2D32fいずれかを実行できます。

vector<CvPoint2D32f> cornersR(n, CvPoint2D32f(1,1));
vector<CvPoint2D32f> cornersL(n, CvPoint2D32f(1,1));

これは、ベクトルに 2 番目の引数のコピーを設定するか、ベクトルの初期サイズを指定せずvector::push_back()に代わりに使用します。vector::operator[]

vector<CvPoint2D32f> cornersR;
vector<CvPoint2D32f> cornersL;

cornersR.push_back(cvPoint2D32f(cornersRp[j].x,cornersRp[j].y));
于 2012-05-18T16:34:40.333 に答える