[英]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.