我的lua文件名为“add4c.lua”,lua代码如下:
function lua_sum(x,y,z)
return x+y+z
end
我的C文件代码如下:
#include "D:/luac/include/lua.h"
#include "D:/luac/include/lualib.h"
#include "D:/luac/include/lauxlib.h"
#include <stdlib.h>
#pragma comment(lib,"D:/luac/lib/lua51.lib")
int main(void)
{
lua_State *L = luaL_newstate();
luaopen_base(L);
luaL_openlibs(L);
int error = luaL_dofile(L, "add4c.lua");
double r;
for (int i = 0; i <= 200; i++){
lua_getglobal(L, "lua_sum");
lua_pushnumber(L, i+1);
lua_pushnumber(L, i+2);
lua_pushnumber(L, i+3);
lua_call(L, 3, 1);
r = lua_tonumber(L, -1);
printf("%d\n", i);
lua_pop(L, 4);
}
lua_close(L);
return 0;
}
我的lua版本是5.1.4,我的c代码是由visual studio 2013编译的。当运行此代码时,它会导致一个错误,只需停止代码,但不显示任何消息,如果我更改“i
最佳答案
lua_call(L, 3, 1)
将使用3个堆栈值,完成时保留1个堆栈值。因此,在lua_call(L, 3, 1)
之后,堆栈上只有一个值,因此lua_pop(L, 4)
弹出的值太多,超出了内部堆栈,因此崩溃。改为使用lua_pop(L, 1)
。
如果使用定义的LUA_USE_APICHECK
重新构建lua,那么在第一次调用lua_pop(L, 4)
时,将从内部断言获得错误消息。
关于c - C在for循环中调用Lua函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31181140/