为什么使用std::sort时我的数组内容变化了?

   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.
为什么会这样,哪里有问题?

阅读 2.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题