2012-05-18 1 views
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); 
         } 

они инициализируются следующим образом, п фиксированного целого

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

, пожалуйста, помогите me out .....

ответ

6

Чтобы использовать vector[], вы должны убедиться, что vector имеет элемент в этом индексе. В этом случае оба вектора пусты, что приводит к нарушению доступа.

Измените заявления на:

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

, который заполнит vectors с n по умолчанию экземпляр CvPoint2D32f.

Если нет конструктора по умолчанию не для CvPoint2D32f вы можете либо:

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

, который будет заполнять векторы с копиями второго аргумента, или использовать vector::push_back() вместо vector::operator[] и без указания исходного размера для вектора :

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

cornersR.push_back(cvPoint2D32f(cornersRp[j].x,cornersRp[j].y));