我正在練習鏈接列表結構,我已經使用該算法編寫了一個程序。在程序中有一個遞歸方法來刪除鏈表的每個元素。但是,該方法崩潰。遞歸方法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時會發生什麼。 –