C++ 分段故障
我在IntList.h文件中有一个名为IntList的基类。以及SortedSet.h文件中名为SortedSet的继承类。 IntList具有以下结构:-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对象的并集,即此二进制运
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删除吗?你不应该删除属于参数的节点。这很粗鲁。即使我删除删除部分,我仍然会得到分段错误