- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑#3:
我的引擎是按以下方式设置的:
struct Engine {
GetEngine()....//Singleton;
std::vector<std::unique_ptr<DisplayObject>> DisplayObjects;
};
然后我写了几个lua接口(interface),如下:
struct LuaObject {
DisplayObject* ControlObject;
void Initialize() {
auto NewObject=make_unique<DisplayObject>();
Engine::GetEngine().DisplayObjects.push_back(std::move(NewObject));
ControlObject=Engine::GetEngine().DisplayObjects.back().get();
}
void RemoveDisplayObject() {
//we remove all objects just for a demonstration
Engine::GetEngine().DisplayObjects.clear();
}
};
引擎中的游戏循环将循环遍历 DisplayObject 并执行各种任务。当 LUA 调用 RemoveDisplayObject() 时,会发生 _CrtIsValidHeapPointer。
我们正在删除 LUA 对象之外的项目,这是导致问题的原因吗?
什么会导致堆错误?我应该采用不同的方法吗?
这是引擎中的逻辑:
游戏(单例)
包含 DisplayObjects
(DisplayObject
的 vector )
Lua 绑定(bind)类:
调用 Game::Singleton
CreateDisplayObject
,获取指向 DisplayObjects
中最后一个对象的指针
具有调用 Game::Singleton
RemoveDisplayObject
并从 CreateDisplayObject
传递指针的 Remove()
函数 < ---- 这会导致堆损坏(调用 vector.clear() 时)。因此从 vector 中删除项目会导致堆错误。
有一些与 DisplayObject
一起使用的额外功能,例如移动它,没有堆损坏。
Lua:
另一个包装 Lua 绑定(bind)类的类
包含 Remove()
函数调用 Lua Bound Class Remove()
在某一时刻,引擎将加载一个额外的 lua 文件,该文件在 lua 类上调用 Remove()。
最佳答案
来自 Luabridge 的自述文件:
Not supported:
- Standard containers like
std::shared_ptr
. (sic!)
所以很可能,您正在使用 unique_ptr
的事实完全破坏了它。我建议切换到其他一些绑定(bind)库;甚至自己写一些简单的东西。
关于c++ - Luabridge:删除时堆损坏(_CrtIsValidHeapPointer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231401/
我正在尝试使用 LuaBridge 通过基类指针将对象从 C++ 传递到 Lua。派生类和基类都已正确注册到 LuaBridge。 在 C++ 方面: // Assume both Foo and F
我一直在阅读一些关于 luabridge 的教程,以便从 lua 访问 c++,但我遇到了一个问题,我似乎无法通过搜索谷歌找到答案。 我已经设置了一个示例程序来运行脚本并从 C++ 访问 lua,它运
我今天刚刚下载了 LuaBridge,到目前为止我对它非常满意。我注意到的一件事是,我能够规避将 lua_State 作为函数参数的正常要求。 我能做到: //C++ files void love(
我使用 LuaBridge 将一些类和函数移植到 Lua。我目前正在调试,我总是得到 main.lua:1: attempt to call method 'new' (a nil value) 这是
我正在尝试使用 LuaBridge 注册两个继承自同一类的类,但失败了。 如何注册以下三个类(class)? class A { public: in
我目前遇到了一些问题,不知道如何解决。 我开始研究一个简单的 2D 引擎,使用 SFML 渲染内容,并使用 Lua 作为我的脚本语言。在加载 Lua 代码之前,引擎首先以启动画面启动 ... 我的问题
让我们考虑以下 C 函数: void returnMultipleValuesByPointer(int* ret0, int* ret1, int* ret2) { *ret0 = 0;
奇怪的问题我有一个使用多个类的程序,其中一些类用于定义其他类内部的对象,但我无法修改它们的值,不确定是否有意义,但我会尝试演示 C++文件 class A{ public: A(){
编辑#3: 我的引擎是按以下方式设置的: struct Engine { GetEngine()....//Singleton; std::vector> DisplayObjects
我是 Lua 和 LuaBridge 的新手,我想知道是否可以注册一个模板函数?我在网上看过 LuaBridge 手册,但无济于事。我尝试的是创建一个指向基类的指针,但后来发现无法在 Lua 中进行转
这个片段适用于基本类型: int CreateBasicObject(lua_State *L) { int ret0; lua_pushinteger(L, ret0); r
一周前我用 LuaBridge 做了第一次小测试,它成功地从脚本中获取了一个 int。 现在我删除了这段代码并尝试在我的游戏引擎中包含 Lua 脚本,但它不再有效。我试着用这个回到基本代码: #inc
我有一些非常简单的源代码来公开一个简单的 Foo 类。 主要.cpp: #include #include #include class Foo { private: i
我写了一个简单的 vec3 类,它实现了 */+- 运算符: class vec3 { public: vec3(): x(0.0f),y(0.0f),z(0.0f) {}
考虑以下示例: function Process() local Container=NewContainer() Container:On(EventType.Add,functio
如何使用 Luabridge(1.0.2) 将函数从 LUA 传递到 C++ local Callback=function() print("Inside Callback function
我正在阅读 LuaBridge reference manual而且我不明白如何实际加载/读取 .lua 文件,以便我可以访问其中的表。 这是 lua 文件(从 tiled 导出): return {
我正在尝试将 Lua 嵌入到 C++ 中(并学习 Lua),从 Elias Daler 的训练轮方法开始 here .我正在使用 MSVC 14.0、LuaBinaries 5.3.2 - Relea
根据LuaBridge readme , LuaBridge 不支持“枚举常量”,我假设它只是 enums。由于 sf::Event 几乎完全是 enums,有什么办法可以公开这个类吗?目前我能想出的
我有一个用 C++ 构造的大对象(我已将其暴露给 Lua),我想在 Lua 中进行处理。 我可以使用 lua_pushinteger、lua_pushstring 将任何简单类型传递给 Lua 函数(
我是一名优秀的程序员,十分优秀!