C++ 从 Lua 读取嵌套表时发生段错误

我正在使用以下函数遍历一个 Lua 表格并将它读入一个 `Json::Value` 中:

Json::Value EncodeTable(lua_State* L, int index){
    Json::Value node;
    //The solution: change lua_pushvalue(L, -1) to lua_pushvalue(L, index)
    lua_pushvalue(L, index);
    lua_pushnil(L);
    while(lua_next(L, -2)){
        lua_pushvalue(L, -2);
        if(lua_isnumber(L, -1)){
            if(lua_isstring(L, -2)){
                node[(int)lua_tonumber(L, -1)-1] = lua_tostring(L, -2);
            }else if(lua_isnumber(L, -2)){
                node[(int)lua_tonumber(L, -1)-1] = lua_tonumber(L, -2);
            }else if(lua_isnil(L, -2)){
                node[(int)lua_tonumber(L, -1)-1] = Json::Value();
            }else if(lua_istable(L, -2)){
                node[(int)lua_tonumber(L, -1)-1] = EncodeTable(L, -2);
            }
        }else{
            if(lua_isstring(L, -2)){
                node[lua_tostring(L, -1)] = lua_tostring(L, -2);
            }else if(lua_isnumber(L, -2)){
                node[lua_tostring(L, -1)] = lua_tonumber(L, -2);
            }else if(lua_isnil(L, -2)){
                node[lua_tostring(L, -1)] = Json::Value();
            }else if(lua_istable(L, -2)){
                node[lua_tostring(L, -1)] = EncodeTable(L, -2);
            }
        }
        lua_pop(L, 2);
    }
    lua_pop(L, 1);
    return node;
}

所有的东西看起来都没问题,直到有一个嵌套的表,这时就会出现 segfault。运行 LLDB 只给我一些汇编错误,所以也没有什么帮助。有没有人知道我做错了什么?

编辑

LLDB 给我这个:

* thread #2: tid = 0x5a47, 0x00007f902f99f280 liblua5.2.so.0
    frame #0: 0x00007f902f99f280 liblua5.2.so.0
-> 0x7f902f99f280:  movzbl 11(%rdi), %ecx
   0x7f902f99f284:  movq   (%rsi), %rdx
   0x7f902f99f287:  movl   $1, %eax
   0x7f902f99f28c:  movq   32(%rdi), %r8
点赞