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之前清除这些指针,所有问题迎刃而解
浙公网安备 33010602011771号