Lua在错误的内存位置参数

时间:2015-01-18 19:27:51

标签: c++ exception lua lua-api

从lua解析变量时,lua的行为很奇怪。

C ++:

int LuaManager::SetTimer(lua_State *pLua)
{
    if (!lua_isstring(pLua, 0)) throw "expected: string";
    if (!lua_isnumber(pLua, 1)) throw "expected: number";

    std::string callback = lua_tostring(pLua, 0);
    double delay = lua_tonumber(pLua, 1);
    Timer timer = Timer(callback, delay);

    return 0;
}

LUA:

SetTimer("Durp", 10);

我在0x76C44598得到了一个"第一次机会异常:Microsoft C ++异常:char在内存位置0x00D7F588"从行

std::string callback = lua_tostring(pLua, 0);

当我调试代码并在弹出异常时按下继续时,它会将随机变量抛出到变量中。 double delay也是如此。

然而,当我说:

std::string callback = lua_tostring(pLua, -2);
double delay = lua_tonumber(pLua, -1);

它仍将提供异常,但会抛出正确的变量。

1 个答案:

答案 0 :(得分:1)

从我的记忆中,行

std::string callback = lua_tostring(pLua, 0);

应该是

std::string callback = lua_tostring(pLua, 1);

因为lua中的索引从1开始。