我試圖訪問一個userdata的類型,以便我可以相應地處理它。想象我有一個命名爲Foo類:Lua C++ userdata
class Foo:public CObject
{
public:
Foo():CObject(){}
int type() {return 1;}
}
class CObject
{
public:
virtual int type(void)=0;
}
的理由是,延伸的CObject的每一個類具有必須由通過的整數已知的類型(以後枚舉)。 Foo類使用luaWwrapper綁定到lua(// https://bitbucket.org/alexames/luawrapper/src/fd9c4fdbf4b25034e3b8475a2c8da66b7caab427?at=default)。
Foo* Foo_new(lua_State* L)
{
Foo* f=new Foo();
lua_newuserdata(L,sizeof(f));
std::cout<<"f="<<f;
return f;
}
在Lua的用戶稱這爲:
f=Foo.new()
print(f)
現在我有一個C++函數,比如說打印:
int lua_print(lua_State* L)
{
void *ud = luaL_checkudata(L, 1, "Foo"); //ud is not zero
std::cout<<"ud="<<ud;
CObject* obj=(CObject*)ud; //Casting to CObject
int objtype=obj->type(); //program CRASHES here
}
我已經看到,程序崩潰導致Foo
和ud
的內存地址不一樣。 I 假定ud
是指包含Foo
的存儲器地址的堆棧的存儲器。如何訪問堆棧的內存地址或Foo
的首選內存地址?