gpt4 book ai didi

c++ - 我不明白我在取消分配内存时做错了什么

转载 作者:太空狗 更新时间:2023-10-29 21:25:45 24 4
gpt4 key购买 nike

所以我有一个正确创建的链表,正确链接但是当我尝试取消分配内存时我似乎无法删除任何节点,该列表仍然存在。我的列表解构器的代码:

void LL_User::free_memory() {
// TODO
LL_User_Node *currentNode;
currentNode = head;
while(currentNode) {
LL_User_Node *temp = currentNode;
currentNode = currentNode->next;
delete temp;
}
//cout << "LL_User::free_memory() is not implemented yet.\n";
}

LL_User::~LL_User() {
if(head == NULL) {
return;
}
free_memory();
}

我的用户类有这个变量和解构函数:

User::User() {
username = "";
password = "";
first_name = "";
last_name = "";
profile_pic_filename = "";
birth_year = 0;
birth_month = 0;
birth_day = 0;
}

User::~User() {
//Nothing placed in body because strings and ints are dealt with by OS?
}

最佳答案

现在编写的代码只有一处严重缺陷;您删除了链接到 head 的列表,但从未将 head 设置为 NULL。从这一点开始,任何接触它的人都会通过垃圾指针遇到未定义的行为。

如果您像这样删除列表,请将 head 设置为 NULL。或者,由于您知道 head 无论如何都应该是 NULL ,所以完全放弃使用 currentNode 。只需使用 head 本身作为遍历列表的指针。想一想,它就会出现。

此外,在您的析构函数中不需要检查 (head == NULL)。它已经在您的 free_memory() 函数中检查过了,这是应该的。

关于c++ - 我不明白我在取消分配内存时做错了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13459897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com