- 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/
我是一名优秀的程序员,十分优秀!