我在C++中創建了一個基本鏈接列表,但由於某種原因,當我用信號11(我發現使用Valgrind)運行程序時,析構函數發生了段錯誤。我的鏈接對象只有兩個變量, string value
和Link* next
簡單LinkedList程序中的析構函數段錯誤
這是析構函數。
這是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;
}
編輯: 對於link.cpp,我做了這個 -
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:'刪除curr;'你從析構函數中刪除'this'。 – tkausl
那我該怎麼做?我很新C++ – Kek
顯式調用析構函數通常不是正確的路徑。 –