2016-09-01 13 views
1

私はLuaで深くネストされたテーブルを作成しようとしています。私が過去16レベルを入れ子にすると、プログラムがクラッシュします。Lua C APIクラッシュで構築されたネストしたテーブル

下のプログラム例では、DEPTHを17ではなく16に変更すると、プログラムはクラッシュしません。私はテーブルの深さが最大であると言っているリソースを見つけることはできません。クラッシュはlua_close()の呼び出しの中にあります。

私はC APIを使用してLuaでテーブルを作成する方法を誤解していますか、実際には最大の深さですか?

#include <assert.h> 
#include "lua.h" 
#include "lauxlib.h" 
#include "lualib.h" 

#define DEPTH 17 

int main(int argc, char* argv[]) 
{ 
    lua_State *L = NULL; 
    size_t i = 0; 

    L = luaL_newstate(); 
    assert(NULL!=L); 

    luaL_openlibs(L); 

    // create the root table 
    lua_newtable(L); 

    // push DEPTH levels deep onto the table 
    for (i=0; i<DEPTH; i++) 
    { 
     lua_pushstring(L, "subtable"); 
     lua_newtable(L); 
    } 

    // nest the DEPTH levels 
    for (i=0; i<DEPTH; i++) 
    { 
     lua_settable(L, -3); 
    } 

    lua_close(L); 

    return 0; 
} 

答えて

1

あなたは2*DEPTHスロットを許可するようにlua_checkstackまたはluaL_checkstackでスタックを増やす必要があります。

関連する問題