簡體   English   中英

析構函數中的分段錯誤

[英]Segmentation fault in destructor

嘗試執行項目時出現分段錯誤。 在main的運行Btree類的析構函數的末尾,它將調用Node類的析構函數。 然后在Word類的析構函數調用中得到錯誤。 然后list.tcc打開(~Btree -> ~Node() -> ~Word() (error): list.tcc:) list.tcc (~Btree -> ~Node() -> ~Word() (error): list.tcc:) list.tcc (~Btree -> ~Node() -> ~Word() (error): list.tcc:)

游標在此行中給出錯誤:

list.tcc:

_Node* __cur = static_cast<_Node*>(this->_M_impl._M_node._M_next);

是此錯誤的原因在Word類中的列表嗎?

班級代碼縮寫如下:

class Btree{
private:
...
Node *root;
...
public:...
~Btree(){delete[] root;};

};

class Node{
...
Word *words;
Node **children;
...
    ~Node(){delete [] words; delete []children;};
};

class Word{
public:
string word;
list<Couple> couple;

    Word(){};
    ~Word(){};
};

class Couple{
...
public:
....
    ~Couple(){};
 };

您是如何分配root 我個人的猜測是,您使用

root = new Node();

如果嘗試將非數組對象分配為數組對象,則會得到未定義的行為。 實際上,它會在節點開始之前使用“單詞”一詞,並假定它是元素計數,並銷毀該數量的元素。 由於只有一個,這必然不能很好地工作。 你可能想要

delete root;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM