[英]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之类的工具也可以用于识别内存泄漏的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.