我有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之类的工具也可以用于识别内存泄漏的位置。
关于c++ - 如何验证在C++链表中已释放节点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25838200/