Lua 使用链表进行垃圾回收

我正在一个项目中使用链表来跟踪一些对象。我不断地向列表中添加新对象并移除旧的对象。然而在这个过程中我似乎无法摆脱内存泄漏的问题。

function linkedlistClass:remove_destroyed()
local current = self.head
local before
for i=1,self.length do
    if current.value.destroyed then
        if current == self.head then
            self.head = self.head.next
            current.value = nil
        else
            before.next = current.next
            current.value = nil
        end
        self.length = self.length - 1
    end
    before = current
    current = current.next
end
    self.tail.next = nil
end

所以这似乎是有问题的代码部分。列表的长度肯定正确计算,因为我已经多次检查过了。

该列表由具有 value 和 next 属性的节点组成。value 属性指向的对象有一个布尔属性 .destroyed,它确定是否应该摆脱该对象。

调用该方法后,列表应该是自包含的。头应该指向第二个元素,尾部指向 nil,列表的长度表现正常。

某种方式留下的节点没有被回收,这会导致内存泄漏。我似乎无法摆脱它们。

感谢您的帮助。

点赞
用户8180243
用户8180243

将下面翻译成中文并且保留原本的 markdown 格式

问题描述

嗯,我怀疑其他人不会有以下问题,但如果你遇到了,请给我发信息。

事实证明,我在使用“困境碰撞器”或“hardon collider”库,并且我没有从场景中删除对象。

2018-04-23 22:09:59