2015-01-18 3 views
3

При анализе переменных из lua 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++ исключение: символ в ячейку памяти 0x00D7F588" от линии

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

Когда я отлаживаю код и нажимаю кнопку «Продолжить», когда всплывает исключение, он превращает случайные переменные в переменная. То же самое касается double delay.

Однако, когда я говорю:

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

Это будет по-прежнему давать исключение, но правильные переменные выбрасываются в

+0

Если выбрано исключение, переменная, безусловно, не будет содержать допустимого значения. –

+5

0 никогда не является допустимым слотом стека. Первый слот для стека равен 1. –

+0

О, ты совершенно прав, такой глупый контроль над моей. Любая идея, хотя на почему -1 и -2 также возвращали правильные значения? – R4VANG3R

ответ

1

Из моих воспоминаний, линия

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

должен быть

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

, потому что индексы в lua начинаются с 1.

Смежные вопросы