【发布时间】:2014-09-14 21:29:41
【问题描述】:
我有 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;
}
我还能如何删除节点?我不希望我的第一个链接列表中突然取消链接的节点在系统中浮动。如果该节点中有重要的敏感信息怎么办?它不应该被一些其他数据填充并放回空闲内存吗?
谢谢。
【问题讨论】:
-
内存在被释放时通常不会被清除,因为这将是低效的并且在格式良好的程序中是不必要的。引用释放的内存是未定义的行为。
标签: c++ xcode struct linked-list singly-linked-list