gpt4 book ai didi

c++ - 如何验证 C++ 链表中的节点是否已解除分配?

转载 作者:行者123 更新时间:2023-11-28 06:41:46 24 4
gpt4 key购买 nike

我有 Xcode,我想知道如何验证我的节点是否被正确删除/解除分配。我确定我会以错误的方式去做。

我正在做的是从 ptrDel 指向的任何地方打印数据,然后使用 Delete 释放它,并检查我是否可以再次查看它(是的,我仍然可以)。我认为这 block 内存会被“清零”或填充一些没有旧数据的东西。为什么仍然可以查看那里的内容?我不应该从 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;
}

我还能如何删除节点?我不希望我的第一个链接列表中突然取消链接的节点在系统中 float 。如果该节点中有重要的敏感信息怎么办?它不应该用其他一些数据填充并放回空闲内存吗?

谢谢。

最佳答案

通过delete 释放的内存通常根本不会改变。在取消链接后,您可以执行类似 ptrDel->next = NULL 的操作,以避免稍后生成有效链。

除了由了解代码的人进行代码审查之外,没有直接的方法来确保您的代码正确 - 当然,一组良好的测试也有助于确保您的代码正常工作(例如,您可以插入一些元素,删除其中一些,看看你是否可以在你的列表中“搜索”它们 - 它们应该在删除之前而不是之后),你可以创建长列表并再次删除(几千个项目和数千次以上),并确保您的整体内存使用量在外循环的第一次和最后一次迭代之间没有上升。

Valgrind 等工具也可用于识别泄漏内存的位置/是否泄漏。

关于c++ - 如何验证 C++ 链表中的节点是否已解除分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25838200/

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