qDebug()<<"vd.size="<<v_diff.size();
for(int i=0;i<v_diff.size();i++)
{
Diff &d=v_diff[i];
qDebug()<<i;
qDebug()<<(long)d.p1;
qDebug()<<(long)d.p2;
}
std::sort(v_diff.begin(),v_diff.end(),[&](const Diff &d1,const Diff &d2)
{
qDebug()<<(long)d1.p1;
qDebug()<<(long)d1.p2;
qDebug()<<(long)d2.p1;
qDebug()<<(long)d2.p2;
if(d1.usable() == false)
return false;
if(d2.usable() == false)
return true;
return d1.get_diff_value() <= d2.get_diff_value();
}
);
这是我加了n多调试代码后的结果,本来的代码是这样的.
std::sort(v_diff.begin(),v_diff.end(),[&](const Diff &d1,const Diff &d2)
{
if(d1.usable() == false)
return false;
if(d2.usable() == false)
return true;
return d1.get_diff_value() <= d2.get_diff_value();
}
);
以及其中涉及的Diff类的定义.
class Diff
{
public:
Diff(Pic *p1,Pic *p2);
void cal_diff();
int get_diff_value()const;
bool usable() const;
public:
Pic * p1;
Pic * p2;
int diff_value;
};
这个排序算法有什么问题?在sort执行之前,所有的p1,p2的指针值差不多都是类似"140737019626888"之类正常的数字.
但,在执行sort过程中它会崩溃.debug显示,它其中一个Diff的2个Pic对象指针的值,1个是数字0x1,1个是数字0x2001.
为什么会这样,哪里有问题?