代码之家  ›  专栏  ›  技术社区  ›  macroland

lua 5.4关闭并收集垃圾导致崩溃

lua
  •  0
  • macroland  · 技术社区  · 4 年前

    我有Lua 5.4 嵌入到项目中 并已实施 __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) --generate 5000 random numbers
    vector=nil
    
    collectgarbage()
    

    2. 同样,如果我多次运行以下脚本文件,也完全没有问题:

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

    3. 但是,以下脚本使用 collectgarbage 当运行多次导致崩溃时:

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

    编辑1:

    4. 以下情况会立即导致崩溃。

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

    我是否误解/遗漏了即将成为闭变量的东西?

    0 回复  |  直到 4 年前