我在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
显式调用析构函数通常不是正确的路径。 –