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

标签 c++ xcode struct linked-list singly-linked-list

我有 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/

相关文章:

c++ - 在 OpenCV 2.4.2 中从 CIF 视频中读取帧

c++ - OpenCV 3 错误 'CV_FOURCC' : identifier not found

ios - 我无法再在我的设备上测试我的应用程序

c++ - 在结构中的数组中初始化结构中的数组时出现问题

c++ - 您需要加入已取消的话题吗? (线程)

c++ - Box2D相邻边碰撞

Xcode 将 DTXcode key 和其他 key 添加到 Info.plist

ios - CommonCrypto XCode 9.0 无法从数据创建 key

时间:2019-03-17 标签:c#struct

arrays - 删除所有具有特定索引的字段