編集#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 バウンド クラス:
を呼び出しGame::Singleton
CreateDisplayObject
、最後のオブジェクトへのポインタを取得しますDisplayObjects
<----からポインターRemove()
を呼び出して渡す関数があります。これにより、ヒープの破損が発生します ( vector.clear () の呼び出し時)。そのため、ベクターからアイテムを削除すると、ヒープ エラーが発生します。Game::Singleton
RemoveDisplayObject
CreateDisplayObject
DisplayObject
ヒープの破損なしで、移動などで機能するいくつかの追加機能があります。
ルア:
Lua バインド クラスをラップする別のクラス
Lua Bound Class Remove()Remove()
を呼び出す関数が含まれています
ある時点で、エンジンは lua クラスで Remove() を呼び出す追加の lua ファイルをロードします。