簡體   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