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

Я пытаюсь сделать глубоко вложенный стол в 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;
}

1 ответ

Решение

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

Другие вопросы по тегам