我就是这样做的。 我在我的 C++ 代码中创建了一个结构和一个静态函数
struct ItemDefinition {
int64_t price;
};
int static getPrice(lua_State* L) {
ItemDefinition* def = (ItemDefinition*)lua_touserdata(L, 1);
printf("%p\n", def);
printf("%d\n", def->price);
return 0;
}
我也在lua中注册了函数,并初始化了一个ItemDefination对象。
ItemDefinition def;
def.price = 120;
lua_pushlightuserdata(lua_state_, (ItemDefinition*)&def);
lua_setglobal(lua_state_, "def");
luaL_Reg module[] = {{"getPrice", &getPrice}, {NULL, NULL}};
在我的 Lua 脚本中,我只是简单地调用函数
getPrice(def)
如果我只打印出 def 的地址就可以正常工作。所以我确定该函数已成功调用。但是,如果我尝试获取 def->price
,我会从 address sanitizer 收到错误消息“==283789==ERROR stack use after return”
我对这两个都不熟悉 c++和 lua .您能帮忙看看问题出在哪里吗?
最佳答案
解决问题,NVM。其实是因为指针的问题。
关于c++ - Lua C API 不适用于指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075630/