3
루아에서 변수를 파싱하면, 루아는 이상하게 행동합니다.잘못된 메모리 위치에있는 루아 인수
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;
}
루아 :
SetTimer("Durp", 10);
내가 얻을 "0x76C44598에서 첫 번째 예외를 : 마이크로 소프트 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은 절대로 유효한 스택 슬롯이 아닙니다. 첫 번째 스택 슬롯은 1입니다. –
오, 당신은 내 바보 같은 완전 바보입니다. -1과 -2도 올바른 값을 반환하는 이유에 대한 아이디어는 있습니까? – R4VANG3R