Вложенная таблица, созданная с помощью Lua C API, дает сбой

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

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

Я неправильно понимаю, как построить таблицу в Lua с помощью 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;
}

person whatisgoingon    schedule 01.09.2016    source источник


Ответы (1)


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

person lhf    schedule 01.09.2016