编辑#3:Luabridge:上删除
我的引擎是建立在以下方式:
struct Engine {
GetEngine()....//Singleton;
std::vector<std::unique_ptr<DisplayObject>> DisplayObjects;
};
然后我写了几LUA接口,以下列方式:
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();
}
};
Engine中的游戏循环将循环显示对象并执行各种任务。当LUA调用RemoveDisplayObject()_CrtIsValidHeapPointer时发生。
我们正在移除LUA对象之外的项目,这是否会导致问题?
什么会导致堆错误?我应该采取不同的方式吗?
这里是在发动机中的逻辑:
游戏(单件)
包含DisplayObjects
(的DisplayObject
矢量)
的Lua绑定类:
致电Game::Singleton
CreateDisplayObject
,获取指针指向最后一个对象在DisplayObjects
具有Remove()
函数,它们调用Game::Singleton
RemoveDisplayObject
和CreateDisplayObject
< ---- 传递指针这导致堆损坏(调用vector.clear时())。因此,从矢量中删除项目会导致堆错误。
有一些额外的功能与DisplayObject
一起使用,如移动它,没有堆腐败。
的Lua:
另一类到包装了的Lua绑定类
包含Remove()
函数调用的Lua绑定类删除()
在一个点上的发动机将加载一个额外的lua文件,它调用lua类的Remove()。
如何为单个DisplayObject分配内存?你可以添加代码来分配和插入一个新的条目到'DisplayObjects'中吗?当更改为原始指针时,clear()不会“删除”它们导致内存泄漏。 – hmjd 2013-04-26 08:01:56
向我们展示您的绑定代码以及 – 2013-04-26 08:35:58
我认为问题是绑定,而不是Lua本身和/或指针类型。 – 2013-04-26 09:09:43