向量访问中的内存损坏错误

时间:2016-05-25 14:24:09

标签: c++ out-of-memory stdvector

我收到内存损坏错误' malloc():内存损坏:0x000000000234d4b0 ***'。我的代码如下。我怀疑错误是由于向量函数中的内存访问无效。我的代码如下。

bool compare_rect(const cv::Point3i &a, const cv::Point3i &b) {
  if (a.x > b.x) return true;
  if (a.y > b.y) return true;
  if (a.z > b.z) return true;
  return false;
}

std::vector<cv::Point3i> patches;
std::sort(patches.begin(), patches.end(), compare_rect);
cv::Point3i dpoint1 = patches.front(); 
int mean1 = dpoint1.x;
int cord1 = dpoint1.y;
int cord2 = dpoint1.z;
int cord3 =0; int cord5 =cord1;
int cord4 =0; int cord6 =cord2;
int it = 0;
for(int i=1; i < patches.size(); i++){
  cv::Point3i dpoint2 = patches[i];
  int mean2 = dpoint2.x; 
  cord3 = dpoint2.y;
  cord4 = dpoint2.z; 
  if (abs(cord4-cord6)>10){
    if (abs(cord3-cord5)>10){
      if(abs(mean2-mean1) > 5){
        cv::rectangle(display_obstacles, cv::Point(cord1, cord2), cv::Point(cord5, cord6), CV_RGB(0,255,0));
        cord1 = cord3;
        cord2 = cord4;
        it = it + 1;
      }
    }
  }
  if(i == (patches.size()-1)){
    cv::rectangle(display_obstacles, cv::Point(cord1, cord2), cv::Point(cord5, cord6), CV_RGB(0,255,0));
  }
  mean1 = mean2;
  cord5 = cord3;
  cord6 = cord4;
}   

你能帮我识别错误吗?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

看看这个片段

std::vector<cv::Point3i> patches;
std::sort(patches.begin(), patches.end(), compare_rect);
cv::Point3i dpoint1 = patches.front();
int mean1 = dpoint1.x;
int cord1 = dpoint1.y;
int cord2 = dpoint1.z;

您将patches声明为空矢量。

你对它进行排序,但是一个空的矢量,已经排序,仍然是一个空矢量。

空载体的

front()给出未定义的效果。

我认为访问dpoint1.xdpoint.ydpoint.z无济于事。

p.s:抱歉我的英语不好。

答案 1 :(得分:1)

  

您的比较不满足std :: sort的要求({0,0,1}和{1,0,0}将比另一个“更大”。这使您的代码不确定。 - molbdnilo

这是错误的原因。谢谢molbdino。