2016-09-01 3 views
1

Я пытаюсь сделать глубоко вложенную таблицу в Lua. Когда я нахожу 16 уровней, моя программа вылетает из строя.Вложенная таблица с ошибками API Lua C

В приведенной ниже примере программы, когда я изменяю DEPTH на 16 вместо 17, программа не сбой. Я не могу найти никаких ресурсов, которые говорят, что существует максимальная высота таблицы, и один такой низкий кажется странным. Сбой в вызове lua_close().

Я не понимаю, как построить таблицу в Lua с использованием API-интерфейса C, или же на самом деле максимальная глубина?

#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

Вам нужно увеличить стек с lua_checkstack или luaL_checkstack, чтобы 2*DEPTH слотов.

Смежные вопросы