繁体   English   中英

如何验证在C ++链表中已释放节点?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM