簡體   English   中英

C在for循環中調用Lua函數

[英]C calling Lua function in a for loop

我的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 <= 10 “,它運作正常,如何解決這個問題?

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)時,您將從內部斷言中收到錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM