返回信息流下面这段代码,会产生segmentation fault,请诸位大神帮忙看一下,这段代码到底哪里有问题。
我测试了一下,comp中如果是始终返回true就会segmentation fault,如果是始终返回false,就没有问题。
莫非是sort的原因??
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Test{
public:
string hehe(vector<int> &num){
sort(num.begin(),num.end(),comp);
string ans;
for(auto i :num){
ans += to_string(i);
}
return ans;
}
static bool comp(int x,int y){
return true;
}
};
int main(){
vector<int> num(100,0);
Test t;
cout << t.hehe(num) << endl;
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #86064同步于 2015/3/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
sort问题
libenchao
2015/3/19镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
100,0只是我在随便测试功能时用的,但是感觉这个错误不应该跟n的数量有关才对的啊。
【 在 wangxiaobupt 的大作中提到: 】
: 跟sort没关系 我也没懂为什么 不过把num(100,0)改成(10,0)就能过了
我自己又思考了一下这个问题,应该是sort需要的函数是一个重载的小于函数,也就是说它把等于当做false。然后就可以解释通了。而且当我重载的函数中采用return x < y;的时候,数据都相同是没有问题的;但是当采用return x <= y的时候,就会出现问题了。
这个问题告诉我们,实现的函数一定要是把相等归到false的判定中,要不然sort中排序会出现问题。
这和STL里的sort内部实现有关 下面这段代码是导致出错的原因
template<class _Pr, class _Ty1, class _Ty2> inline
bool _Debug_lt_pred(_Pr _Pred,
_Ty1&& _Left, _Ty2&& _Right,
_Dbfile_t _File, _Dbline_t _Line)
{ // test if _Pred(_Left, _Right) and _Pred is strict weak ordering
if (!_Pred(_STD forward<_Ty1>(_Left), _STD forward<_Ty2>(_Right)))
return (false);
else if (_Pred(_STD forward<_Ty2>(_Right), _STD forward<_Ty1>(_Left)))
_DEBUG_ERROR2("invalid operator<", _File, _Line);
return (true);
}
简单点说,这段代码就是检测left 和 right 的迭代器指向的值,pred 就是你自己定义的比较函数。if和else if这两个判断条件必须得有一个为真,要么left < right ,要么left >= right, 不能既left < right 又right > left,你讲comp函数的返回值设为永远true,那么那两个条件就全为真,那么就出错。如果设为永远false,那么进行第一个if判断时就成立聪儿直接返回false ,所以不会出错。
我这是vs2013里的代码,linux下的STL应该也差不了多少
【 在 libenchao 的大作中提到: 】
: 下面这段代码,会产生segmentation fault,请诸位大神帮忙看一下,这段代码到底哪里有问题。
: 我测试了一下,comp中如果是始终返回true就会segmentation fault,如果是始终返回false,就没有问题。
: 莫非是sort的原因??
: ...................
之前看到return true;的时候感觉有点怪,一般要么递增要么递减 我要以为也能这么用
原来这样不行= =
【 在 libenchao 的大作中提到: 】
: 我自己又思考了一下这个问题,应该是sort需要的函数是一个重载的小于函数,也就是说它把等于当做false。然后就可以解释通了。而且当我重载的函数中采用return x < y;的时候,数据都相同是没有问题的;但是当采用return x <= y的时候,就会出现问题了。
: 这个问题告诉我们,实现的函数一定要是把相等归到false的判定中,要不然sort中排序会出现问题。
谢大神指点,我自己只是猜测这里会有问题,看了大神的贴出来的代码,终于确定了自己的猜想。
【 在 moonfighting 的大作中提到: 】
: 这和STL里的sort内部实现有关 下面这段代码是导致出错的原因
: [code=c]
: template<class _Pr, class _Ty1, class _Ty2> inline
: ...................