我有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;
}
我还能如何删除节点?我不希望我的第一个链接列表中突然取消链接的节点在系统中浮动。如果该节点中有重要的敏感信息怎么办?难道它不会被其他一些数据填满并放回到空闲内存中吗?
谢谢。
答案 0 :(得分:1)
使用delete
释放的内存通常根本不会更改。取消链接后,您可以执行ptrDel->next = NULL
之类的操作,以避免以后生成有效链。
除了理解代码的人的代码审查之外,没有直接的方法来确保您的代码是正确的 - 当然,一组好的测试对于确保代码有效也很有用(例如,您可以插入一些元素,删除其中的一些,看看你是否可以在列表中“搜索”它们 - 它们应该在删除之前,而不是之后),你可以创建长列表并再次删除(几千个项目)并且数千次以上),并确保在外部循环的第一次和最后一次迭代之间,您的整体内存使用率不会上升。
Valgrind等工具也可用于识别泄漏内存的位置。