如何删除正在使用的对象(节点)
How to delete an object ( node ) which is in use
我有以下代码,可以使用迭代器将项目插入双链表。这就是我们被要求这样做的方式。代码有效,但问题是我的绝对内存泄漏为 24 字节。
NodeIterator<T> insert(NodeIterator<T> & itrPassed, const T datapassed)
{
Node<T> * newNode = new Node<T>(datapassed);
Node<T>* previousOfCurrent = itrPassed.getCurrent()->previous;
previousOfCurrent-> next = newNode;
newNode -> previous = previousOfCurrent;
newNode -> next = itrPassed.getCurrent();
itrPassed.setCurrent(newNode);
return itrPassed;
}
我知道问题是由这条线引起的Node<T> * newNode = new Node<T>(datapassed);
.我无法删除 newNode 对象,因为我返回了一个指向它的迭代器,并且它在我的链表中使用。
如何解决这个问题?
我看到的一个问题是您没有更新当前节点的previous
。当前节点的previous
仍指向旧节点。因此,如果使用 previous
迭代节点,则将跳过新创建的节点。
我看到的另一个问题是您在访问previousOfCurrent
而不检查它是否是有效的指针。
不确定修复它们是否会解决您的内存泄漏问题。
NodeIterator<T> insert(NodeIterator<T> & itrPassed, const T datapassed)
{
Node<T> * newNode = new Node<T>(datapassed);
Node<T>* previousOfCurrent = itrPassed.getCurrent()->previous;
// Prevent accessing a nullptr
if ( previousOfCurrent != nullptr )
{
previousOfCurrent-> next = newNode;
newNode -> previous = previousOfCurrent;
}
newNode -> next = itrPassed.getCurrent();
// Add this
itrPassed.getCurrent()->previous = newNode;
itrPassed.setCurrent(newNode);
return itrPassed;
}
相关文章:
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 如何将带有缓冲区的对象从插件发送到节点线程安全
- 链接节点本机模块中的提升库,对象文件需要替代库版本
- 节点链表中的对象
- 无法更新属于列表中节点的对象中的值
- 为什么我的类节点覆盖自身而不是创建新的节点对象
- C++ 在节点内存储对数据对象的引用,而不复制数据
- 在 C++ 节点 nan 插件中处理 JavaScript 对象
- 我们不能在不使用指向对象的指针的情况下创建节点C++吗?
- C 在堆栈上对对象(节点)做出一系列指针
- 如何使用模板在数据结构中链接节点对象
- 我如何不调用位于链接列表节点中的对象的构造函数
- 如何删除正在使用的对象(节点)
- 如何从节点本机插件正确创建Buffer对象
- C++ 链表:"->"运算符无法更改节点对象的内部值
- ROS:将回调函数和对象成员绑定到订阅节点
- C++:复制构造函数正在删除原始对象中的节点
- 获取类型为"节点"的临时对象的地址
- ptr<Node> a = 创建对象 < 节点 > ();
- 如果对象没有默认构造函数,并且不允许在其类定义中创建一个,那么如何将对象放入节点中?