C++ 分段故障

C++ 分段故障,c++,segmentation-fault,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对象的并集,即此二进制运

我在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;
}
SortedSet操作员|(常量SortedSet&lho,常量SortedSet&rho)
{
分类集温度;
IntNode*set1=lho.head;
IntNode*set2=rho.head;
while(设置1->next!=0)
{
温度回推(设置1->数据);
set1=set1->next;
}
删除set1;
while(set2->next!=0)
{
如果(温度输入(设置2->数据)==false)
{
温度回推(设置2->数据);

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

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

while(set1 != 0)
{
    temp.push_back(set1->data);
    set1 = set1->next;
}
然后拍打自己的前额,因为快速应用调试器很容易发现这一点


编辑:您还应该删除
delete
操作,因为它们总是作用于空指针。不清楚为什么您只想删除列表中的一个元素,所以您认为您正在做的事情可能不需要做,尽管没有关于
SortedSet
工作的信息,很难做到这一点o知道。

听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行程序,并查看它与您期望的有何偏差。如果您要进行任何编程,这是一个必不可少的工具。进一步阅读:您可以发布调用堆栈吗?您的意思是什么?我如何通过main删除吗?你不应该删除属于参数的节点。这很粗鲁。即使我删除删除部分,我仍然会得到分段错误