C++で基本的なリンクリストを作成していますが、シグナル11(これはValgrindを使用して見つかりました)でプログラムを実行すると何らかの理由でデストラクタがsegfaultになります。 My Linkオブジェクトには2つの変数しかありません。 string value
とLink* next
単純なLinkedListプログラムのデストラクタsegfault
これはデストラクタです。
これはmain.cppに
int main() {
string temp;
getline(cin, temp);
Link* head = new Link(temp, NULL);
Link* tempHead = head;
for(int i = 1; i < 5; i++) {
getline(cin, temp);
Link* newLink = new Link(temp, head);
head = newLink;
}
head->printAll(head);
head->~Link();
return 0;
}
EDITです:link.cppについては 、私はthis-
Link::~Link() {
Link* curr = this;
delete curr;
}
をしました。そしてmain.cppにするために、私は
にhead->~Link()
を変更しました
Link* curr = tempHead;
while(curr!=NULL) {
Link* nextLink = curr->getNext();
curr->~Link(); //replacing with delete curr gives the same segfault
curr = nextLink;
}
1: 'head->〜Link();'これをしないでください。 2: 'delete curr;'あなたはデストラクタの中から 'this'を削除しています。 – tkausl
それではどうしたらいいですか?私はかなり新しいC++です – Kek
明示的にデストラクタを呼び出すことは、通常正しいパスではありません。 –