Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在循环中第二次调用luaT_pushudata时失败_C++_Api_Lua - Fatal编程技术网

C++ 在循环中第二次调用luaT_pushudata时失败

C++ 在循环中第二次调用luaT_pushudata时失败,c++,api,lua,C++,Api,Lua,我正在使用lua的c api,遇到了一些问题 当我做一些循环时,luaT_pushudata在我第二次调用它时总是失败 “在0x7ffff7ba85b3没有lua_newuserdata()可用的源” (在eclipse中调试时) 当直接运行“可原谅”时,它只是说: 分段故障(堆芯转储) 这是我的部分代码(它们在一个循环中): //建立新的元组 元宝树; //无法删除缓冲区字符,擦除向量时必须手动取消分配缓冲区字符 unsigned char*buffer_char=新的unsigned cha

我正在使用lua的c api,遇到了一些问题

当我做一些循环时,luaT_pushudata在我第二次调用它时总是失败 “在0x7ffff7ba85b3没有lua_newuserdata()可用的源” (在eclipse中调试时)

当直接运行“可原谅”时,它只是说: 分段故障(堆芯转储) 这是我的部分代码(它们在一个循环中):

//建立新的元组
元宝树;
//无法删除缓冲区字符,擦除向量时必须手动取消分配缓冲区字符
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)
三次