2016-05-20 8 views
2

Ich bin neu in C++ - Programmierung und ich triff dieses Problem in einem Teil meines Codes, wo der Fehler ist manchmal Speicherzuweisung Typ Fehler und manchmal ist es doppelt kostenlos Fehler.Double frei oder Speicherzuweisung Fehler

Fehlercode ist wie folgt.

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 
      } 
     } 
    } 
} 

Wenn ich obstacles.at<int>(r,c) = 0; Linie zu entfernen, wird es keine Fehler sein.

Ich verstehe das nicht, weil r und c nur die obstacles Matrix Zeilen- und Spaltennummern sind.

Jede Hilfe in dieser Hinsicht wird sehr geschätzt.

Antwort

1

Ihre Matte hat den Typ CV_8UC1, was ein 8 Bit = 1 Byte Datentyp ist.

Sie versuchen, als .at<int> zugreifen, aber int ist ein 32-Bit-Datentyp.

Bitte versuchen unsigned char oder anderen 8-Bit-Typen zu verwenden, wie unten dargestellt:

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

Vielen Dank für die Erklärung, hatte ich Schwierigkeiten zu verstehen, wie es funktioniert. Vielen Dank – Hasi