lua退出时内存删除的诡异异常及处理

lua退出时内存删除的诡异异常及处理

      最近在使用自己封住的一套lua库使用中遇到这样一个问题,多注册一个类成员函数后,即便一个lua文件都没加载,都会在lua_close中的freestack函数中crash

      我的lua封装非常简单,支持C++类成员函数调用上也是在luaplus基础上改造而来的:

    void register_helper( lua_State* L, int tableindex, const char* funcname, lua_CFunction dispatcher, void* func, int sizeoffunc, const void* userdata, int sizeofud )
    {
        // function | userdata = lightuserdata
        unsigned char* buffer = (unsigned char*)lua_newuserdata( L, sizeoffunc + sizeofud );
        memcpy( buffer, (void*)func, sizeoffunc );
        memcpy( buffer + sizeoffunc, &userdata, sizeofud );

        lua_pushstring( L, funcname );
        lua_pushlightuserdata( L, (void*)buffer);  
        lua_pushcclosure(L, dispatcher, 1);
        lua_settable( L, tableindex );
    }
    
 

检查发现,貌似是lua_newuserdata的问题,将其换为malloc,问题解决了。

虽然支持google了一下类似的问题,并且也在gc库内打过断点,new出来的内存绝非简单的被gc回收,而有可能是lua某些机制造成的,毕竟这样给C++做绑定是很常见的

马上做了一个list保存指针,并在lua_close之前清除这些指针,所有问题迎刃而解

你可能感兴趣的:(lua退出时内存删除的诡异异常及处理)