C вызов Lua функции в цикле for


Мой 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("%dn", i);
        lua_pop(L, 4);
    }

    lua_close(L);


    return 0;
}

Моя версия Lua - 5.1.4, а мой код c компилируется Visual Studio 2013.При запуске этого кода, он вызывает ошибку просто остановить код, но нет сообщения,и если я изменяю предложение цикла, как "i

1 4

1 ответ:

lua_call(L, 3, 1) потребляет 3 значения стека и оставляет 1, когда это сделано. Итак, после lua_call(L, 3, 1) Есть только одно значение в стеке, и поэтому lua_pop(L, 4) выскакивает слишком много значений и выходит за пределы внутреннего стека, следовательно, происходит сбой. Вместо этого используйте lua_pop(L, 1).

Если вы перестроите Lua с LUA_USE_APICHECK определенным, то вы получите сообщение об ошибке от внутреннего assert при первом вызове lua_pop(L, 4).