分段故障

时间:2016-03-11 12:48:55

标签: c++ segmentation-fault

我在IntList.h文件中有一个名为IntList的基类。以及在SortedSet.h文件中称为SortedSet的继承类。 IntList具有以下结构: -

struct IntNode
{
    int data;
    IntNode *next;
    IntNode( int data ) : data(data), next(0) {}
};

以下代码是SortedSet类中的友元函数。此函数返回一个SortedSet对象,该对象是2个SortedSet对象的并集,该二元运算符的左右操作数。

SortedSet operator|(const SortedSet &lho, const SortedSet &rho)
{
    SortedSet temp;
    IntNode* set1 = lho.head;
    IntNode* set2 = rho.head;

    while(set1->next != 0)
    {
        temp.push_back(set1->data);
        set1 = set1->next;
    }

    delete set1;

    while(set2->next != 0)
    {
        if (temp.in(set2->data) == false)
        {
            temp.push_back(set2->data);
            //cout<<"It isn't in there"<<endl;
        }
        set2 = set2->next;
    }
    delete set2;

    return temp;
}

我遇到了分段错误,我似乎无法修复它。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

代码中的一个明显错误是,当您应该测试set1->next不为空时,测试set1不为空。根据您发布的有限信息,很难确定这是唯一的问题,但这几乎肯定会导致分段错误,所以我相信这是问题所在。

将while循环更改为如下所示:

while(set1 != 0)
{
    temp.push_back(set1->data);
    set1 = set1->next;
}

然后在额头拍打自己,因为通过快速应用调试器可以很容易地接受它。

编辑:您还应该删除delete操作,因为它们将始终作用于空指针。不清楚为什么你只想删除列表中的一个元素,所以也许你认为你在做什么并不需要做,尽管没有关于SortedSet它的工作原理的信息很难知道。