lua 5.4 __close 和 collectgarbage 导致崩溃

我将 Lua 5.4 嵌入到一个项目中,并为 userdata (即数字向量)实现了 __close 魔术方法。该项目拥有自己的脚本编辑器并且能够运行脚本。__close 的实现方式与 __gc 的相同,如下所示:

int Vector_gc(lua_State* L)
{
    CVector<double>* vector = *(CVector<double>**)lua_touserdata(L, 1);

    delete vector;

    return 0;
}

1) 在一个脚本文件中运行以下脚本时,没有任何问题:

local vector=std.rand(5000) -- 生成 5000 个随机数
vector=nil

collectgarbage()

2) 同样地,如果多次运行以下脚本文件,也没有任何问题:

local vector <close> = std.rand(5000)

3) 然而,当多次运行以下使用 collectgarbage 的脚本时,会导致崩溃:

local vector <close> = std.rand(5000)

collectgarbage()

EDIT 1:

4) 以下内容将立即导致崩溃。

if(true) then
    local vector <close> = std.rand(5000)
    vector[2]=1
end

collectgarbage()

我是否对即将关闭的变量有误解或遗漏了什么?

点赞