0

luaコードを呼び出すために、以下のようなC ++コードがあります

for (int i =0; i < 2000; i++)
{
    lua_getglobal(g_L, "AnalyzeScript");
    lua_pushstring(g_L, "1");
    lua_pushstring(g_L, "2");
    lua_pushstring(g_L, "3");

    if(lua_pcall(g_L,3,0,0) != 0)
    {
        //          char temp[200]={0}; sprintf(temp, "err: %s",  lua_tostring(g_L, -1));
        //          MessageBoxA(0,temp,0,0);
    }

以下のようなluaコード

local cnt = 0
function AnalyzeScript(foldername, filename, pOut)
    cnt = cnt + 1
    print(cnt)
end

「死んだコルーチンを再開できません」(コルーチンは別の場所にあります)を除いて、すべて問題ありません

lua func を 2000 回呼び出すと lua スタックが台無しになるようです。2000 を 200 に変更すると、すべて問題なく動作します。

なぜ?

4

1 に答える 1

0

エラーを再現できませんでした。コードを少し変更しました:

/* test.c */
#include "lua.h"
#include "lauxlib.h"

void main() {
    int i;
    lua_State *g_L = luaL_newstate();
    luaL_openlibs(g_L);
    luaL_dofile(g_L, "s.lua");
    for (i =0; i < 2000; i++)
    {
        lua_getglobal(g_L, "AnalyzeScript");
        lua_pushstring(g_L, "1");
        lua_pushstring(g_L, "2");
        lua_pushstring(g_L, "3");

        if(lua_pcall(g_L,3,0,0) != 0)
        {
//          char temp[200]={0}; sprintf(temp, "err: %s",  lua_tostring(g_L, -1));
//          MessageBoxA(0,temp,0,0);
        }
    }
    lua_close (g_L);
}

次のコマンドを使用して Linux でコンパイルされました (/fakepath/lua-5.2.0 に Lua ディストリビューションがインストールされています)。

gcc test.c -I/fakepath/lua-5.2.0/src /fakepath/lua-5.2.0/src/liblua.a -lm -ldl

ファイル test.lua はまさにあなたが投稿したものです。問題は別の場所にあるのかもしれません...

于 2013-05-03T12:48:59.477 に答える