我收到内存损坏错误' 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;
}
你能帮我识别错误吗?
非常感谢您的帮助。
答案 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.x
,dpoint.y
和dpoint.z
无济于事。
p.s:抱歉我的英语不好。
答案 1 :(得分:1)
您的比较不满足std :: sort的要求({0,0,1}和{1,0,0}将比另一个“更大”。这使您的代码不确定。 - molbdnilo
这是错误的原因。谢谢molbdino。