我正在练习链接列表结构,我已经使用该算法编写了一个程序。在程序中有一个递归方法来删除链表的每个元素。但是,该方法崩溃。递归方法C++
void exit()
{
Person* person = phead;
exterminateStartingFrom(person);
}
void exterminateStartingFrom(Person* person)
{
Person* nextperson;
nextperson = person->getNext();
if(nextperson){
exterminateStartingFrom(nextperson);
}
delete person;
}
此方法在用户想要退出时运行。 “头脑”代表人员名单的第一个元素。问题表现为:双重释放或腐败(fasttop)
这里是类人:
class Person {
private:
std::string firstname;
std::string lastname;
int age;
Person* next;
public:
Person(std::string, std::string, int);
void printDescription();
void printFirstname();
void printLastname();
void printAge();
void setNext(Person*);
Person* getNext();
};
感谢。
如果'phead'开头为NULL,那么函数将会失败,但否则看起来没问题。 –
很大程度上取决于(i)Person对象是如何初始化的(构造函数)和(ii)它们是如何被销毁的(析构函数)。 – jogojapan
您应该向我们展示Person析构函数,以查看在调用delete时会发生什么。 –