Luabridge:删除时出现堆损坏(_CrtIsValidHeapPointer)

时间:2013-04-26 07:55:42

标签: c++ c++11 lua luabridge

编辑#3:

我的引擎按以下方式设置:

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中的游戏循环将遍历DisplayObject并执行各种任务。当LUA调用RemoveDisplayObject()_CrtIsValidHeapPointer时。

我们正在删除LUA对象之外的项目,这会导致问题吗?

什么会导致堆错误?我应该采用不同的方法吗?


以下是引擎中的逻辑:

游戏(单身人士)

包含DisplayObjects(向量DisplayObject

Lua Bound Class:

致电Game::Singleton CreateDisplayObject,获取指向DisplayObjects

中最后一个对象的指针

具有Remove()函数,该函数调用Game::Singleton RemoveDisplayObject并传递指针CreateDisplayObject&lt; ---- 这会导致堆损坏(调用向量时)。明确())。因此从向量中删除项会导致堆错误。

有一些额外的功能可以与DisplayObject一起使用,就像移动它一样,没有堆损坏。

的Lua:

包装Lua绑定类的另一个类

包含Remove()函数,该函数调用 Lua Bound Class Remove()

引擎会在某一时刻加载一个额外的lua文件,该文件在lua类上调用Remove()。

1 个答案:

答案 0 :(得分:3)

来自Luabridge的自述:

  

不支持:

     
      
  • std::shared_ptr等标准容器。 (原文如此!)
  •   

所以很可能,你使用unique_ptr的事实完全是在摧毁它。我建议切换到其他一些绑定库;甚至自己写一些简单的东西。