Вложенная таблица, созданная с помощью сбоев 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
слоты.