如何验证一个节点在C++链表中是否已解除分配
How can I verify a node is deallocated in a C++ Linked List?
我有Xcode,我想知道如何验证我的节点是否被正确删除/释放。我确信我做这件事的方式不对。
我正在做的是从ptrDel所指向的任何位置打印数据,然后使用Delete来释放它,并检查我是否可以再次查看它(是的,我仍然可以)。我以为这段内存会被"清零",或者用没有旧数据的东西填充。为什么仍然可以查看那里的内容?我不应该从XCode得到一个"坏内存访问"错误吗?
这是我的结构
struct Node {
int data;
Node* next;
};
bool deleteNode(Node **head, Node *ptrDel) {
Node *cur = *head;
printf("deleteNode top %d n", ptrDel->data); //"deleteNode top a" would be the output for example
if(ptrDel == *head) {
*head = cur->next;
delete ptrDel;
printf("deleteNode 2 %d n", ptrDel->data); //"deleteNode top a" would be the output
return true;
}
while(cur) {
if(cur->next == ptrDel) {
cur->next = ptrDel->next;
delete ptrDel;
printf("deleteNode 2 %d n", ptrDel->data); //"deleteNode top a" would be the output
return true;
}
cur = cur->next;
}
return false;
}
否则我如何删除节点?我不希望我的第一个链表中突然取消链接的节点在系统中浮动。如果该节点中存在重要的敏感信息,该怎么办?难道不应该用其他数据填充并放回空闲内存中吗?
谢谢。
使用delete
释放的内存通常根本不会更改。您可以在取消链接后执行类似ptrDel->next = NULL
的操作,以避免它稍后生成有效的链。
除了由了解代码的人进行代码审查之外,没有任何直接的方法可以确保你的代码是正确的-当然,一组良好的测试也有助于确保你的程序正常工作(例如,你可以插入一些元素,删除其中的一些,看看你是否可以在列表中"搜索"它们-它们应该在删除之前,而不是之后),您可以创建长列表并再次删除(数千个项目和数千次以上),并确保您的总体内存使用率在外循环的第一次和最后一次迭代之间不会上升。
Valgrind等工具也可用于识别内存泄漏的位置/是否泄漏。
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 使用std::list创建循环链表
- 链表的泛型函数remove()与成员函数remove)
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我们可以删除链表中静态内存中的节点吗
- C++,指针数组,指向双链表中的条目
- 链表中写入访问冲突的未知原因
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 打印所有链表的元素 (C++)
- 错误:需要类名(链表c++)
- 为什么C中的通用链表中存储的数据已损坏
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 链表c++插入,所有情况都已检查,但没有任何工作
- 链表,将列表复制到另一个列表
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 对单向链表进行排序时出现运行时错误