sách gpt4 ai đã đi

c++ - 如何删除正在使用的对象(节点)

In lại 作者:行者123 更新时间:2023-11-27 23:50:06 29 4
mua khóa gpt4 Nike

我有以下代码使用迭代器将项目插入双链表。这就是我们被要求这样做的方式。代码有效,但问题是我有 24 字节的绝对内存泄漏。

NodeIterator insert(NodeIterator & itrPassed, const T datapassed)
{
Node * newNode = new Node(datapassed);
Node* previousOfCurrent = itrPassed.getCurrent()->previous;
previousOfCurrent-> next = newNode;
newNode -> previous = previousOfCurrent;
newNode -> next = itrPassed.getCurrent();
itrPassed.setCurrent(newNode);
return itrPassed;
}

我知道问题出在这行 Node * newNode = new Node(datapassed); .我无法删除 newNode 对象,因为我正在返回一个指向它的迭代器并且它在我的链表中使用。

如何解决这个问题?

1 Câu trả lời

我看到的一个问题是您没有更新当前节点的 previous。当前节点的previous仍然指向老节点。因此,如果您使用 previous 遍历节点,您将跳过新创建的节点。

我看到的另一个问题是您在访问 previousOfCurrent 时没有检查它是否是一个有效指针。

不确定修复它们是否会解决您的内存泄漏问题。

NodeIterator insert(NodeIterator & itrPassed, const T datapassed)
{
Node * newNode = new Node(datapassed);
Node* 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++ - 如何删除正在使用的对象(节点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47143764/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com