我在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;
}
我遇到了分段错误,我似乎无法修复它。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:1)
代码中的一个明显错误是,当您应该测试set1->next
不为空时,测试set1
不为空。根据您发布的有限信息,很难确定这是唯一的问题,但这几乎肯定会导致分段错误,所以我相信这是问题所在。
将while循环更改为如下所示:
while(set1 != 0)
{
temp.push_back(set1->data);
set1 = set1->next;
}
然后在额头拍打自己,因为通过快速应用调试器可以很容易地接受它。
编辑:您还应该删除delete
操作,因为它们将始终作用于空指针。不清楚为什么你只想删除列表中的一个元素,所以也许你认为你在做什么并不需要做,尽管没有关于SortedSet
它的工作原理的信息很难知道。