繁体   English   中英

分段故障

[英]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;
}

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

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

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

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

然后拍自己的额头,因为如果快速应用调试器,这很容易上手。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM