std :: sort throws Segmentation Fault C ++

时间:2013-08-04 14:17:23

标签: c++ sorting stl segmentation-fault

这是我的代码

bool cmp (const char &a, const char &b)
{   
    if ((int) a == (int) b)
    {
        return false;
    }

    if ((int) a > (int) b)
    {
        return false;
    }
    return true;
}   
std::sort(
        dfaVector.at(0).getSigma().begin(),
        dfaVector.at(0).getSigma().end(),
        cmp);

getSigma()返回std::vector<char>,并且它们不是空的 - 我检查了它。如果你愿意,我可以从gdb发布堆栈跟踪。我正在使用g ++ 4.8,OS Mint 14

ANSWER

正如@livingissuicide所建议的那样,问题是getSigma()需要返回一个引用(即......常量,@ PhoenixX_2)。解释为什么它需要返回一个引用(为什么只是一个简单的副本还不够)是因为

  

问题是有两次调用getSigma,产生两个不同的向量。传递给sort的一对迭代器不是有效范围 - 两个迭代器指向不同的容器。

解释由@IgorTandetnik提供。

2 个答案:

答案 0 :(得分:5)

  

getSigma()返回std :: vector&lt; char&gt;

确保你的getSigma()函数返回一个引用(std :: vector&lt; char&gt;&amp;)而不是副本!

答案 1 :(得分:0)

确保dfaVector不为空。还要确保getSigma()返回一些常量(引用)。