C++ 在循环中第二次调用luaT_pushudata时失败
我正在使用lua的c api,遇到了一些问题 当我做一些循环时,luaT_pushudata在我第二次调用它时总是失败 “在0x7ffff7ba85b3没有lua_newuserdata()可用的源” (在eclipse中调试时) 当直接运行“可原谅”时,它只是说: 分段故障(堆芯转储) 这是我的部分代码(它们在一个循环中):C++ 在循环中第二次调用luaT_pushudata时失败,c++,api,lua,C++,Api,Lua,我正在使用lua的c api,遇到了一些问题 当我做一些循环时,luaT_pushudata在我第二次调用它时总是失败 “在0x7ffff7ba85b3没有lua_newuserdata()可用的源” (在eclipse中调试时) 当直接运行“可原谅”时,它只是说: 分段故障(堆芯转储) 这是我的部分代码(它们在一个循环中): //建立新的元组 元宝树; //无法删除缓冲区字符,擦除向量时必须手动取消分配缓冲区字符 unsigned char*buffer_char=新的unsigned cha
//建立新的元组
元宝树;
//无法删除缓冲区字符,擦除向量时必须手动取消分配缓冲区字符
unsigned char*buffer_char=新的unsigned char[rect.width*rect.height*3];
glReadPixels(0,0,rect.width,rect.height,GL_RGB,GL_无符号字节,buffer_char);
expndtwa.pic=缓冲区字符;
a.action=new double[3];
奖励=新的双倍[1];
totalBuffer.push_back(a);
//采取行动
//采取行动
double*buffer=charA2fA(totalBuffer[totalStep].pic,原始宽度*原始高度*3);
//std::cout我发现了问题:我不应该写lua_-remove(L,-1)、lua_-remove(L,-2)、lua_-remove(L,-3),而应该只写lua_-pop(L,3)或写lua_-remove(L,-1)三次luaT_-pushudata
窃取一个引用,这样您就可以访问已释放的内存。与valgrind核实。lua_newuserdata()没有可用的源代码”消息正常;这意味着您正在使用的Lua库没有使用调试符号编译,因此您将无法查看其中的代码行。我认为你不应该释放一个由userdata引用的张量。@colonelthirtyttwo我不需要luaapi分配的内存中的数据,所以我必须释放它。我发现了问题:我不应该写lua\u-remove(L,-1),lua\u-remove(L,-2),lua\u-remove(L,-3)
我应该简单地写lua\u-pop(L,3)
或者写lua\u-remove(L,-1)
三次