2016-05-20 12 views
2

私はC++プログラミングの新人です。私のコードの1つの部分でこの問題を抱えています。このエラーは、メモリ割り当てタイプのエラーであることがあります。ダブルフリーまたはメモリ割り当てエラー

エラーコードは以下の通りです。

cv::Mat obstacles = cv::Mat::ones(output.size(), CV_8UC1); 

for (int r=0; r<obstacles.rows; ++r) { 
    int x_cord = cvRound((r - intercet)/slope); 
    if (x_cord >= 0 && x_cord <= disp_size){ 
     for (int c=0; c<obstacles.cols; ++c) { 
       int d = output.at<int>(r,c); 
       if ((d/(256/disp_size)) <= x_cord+5){//<= x_cord+5 && d>= x_cord-5){ 
       obstacles.at<int>(r,c) = 0; //error is in this line 
      } 
     } 
    } 
} 

obstacles.at<int>(r,c) = 0;行を削除してもエラーはありません。

rcはそれぞれ行列の行番号と列番号であるため、これはわかりません。

この点に関するお手伝いがあります。

答えて

1

マットのタイプは、CV_8UC1で、8ビット= 1バイトのデータタイプです。

.at<int>としてアクセスしようとしましたが、intは32ビットのデータ型です。

以下に示すようにunsigned char型または他の8ビット・タイプを使用してみてください:

cv::Mat obstacles = cv::Mat::ones(output.size(), CV_8UC1); 

for (int r=0; r<obstacles.rows; ++r) { 
int x_cord = cvRound((r - intercet)/slope); 
if (x_cord >= 0 && x_cord <= disp_size){ 
    for (int c=0; c<obstacles.cols; ++c) { 
      int d = output.at<uchar>(r,c); 
      if ((d/(256/disp_size)) <= x_cord+5){//<= x_cord+5 && d>= x_cord-5){ 
      obstacles.at<uchar>(r,c) = 0; //error is in this line 
     } 
    } 
    } 
} 
+1

説明のおかげで多くのことを、私はそれが働いているか理解する上で問題がありました。ありがとう – Hasi