2016-09-01 1 views
1

루아에서 깊이 중첩 된 테이블을 만들려고합니다. 지난 16 레벨을 중첩하면 프로그램이 다운됩니다.Lua C API 충돌로 생성 된 중첩 테이블

아래 예제 프로그램에서 17 대신 DEPTH를 16으로 변경하면 프로그램이 중단되지 않습니다. 나는 최대 표 깊이가 있다고 말하는 어떤 자원도 찾을 수 없으며, 그렇게 낮은 표정은 이상하게 보입니다. 충돌은 lua_close() 호출 내에서 발생합니다.

C API를 사용하여 루아에서 테이블을 만드는 방법을 잘못 이해했거나 실제로 최대 깊이가 있습니까?

#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와 스택을 증가해야합니다.

관련 문제