0

編集#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 RemoveDisplayObjectCreateDisplayObject

DisplayObjectヒープの破損なしで、移動などで機能するいくつかの追加機能があります。

ルア:

Lua バインド クラスをラップする別のクラス

Lua Bound Class Remove()Remove()を呼び出す関数が含まれています

ある時点で、エンジンは lua クラスで Remove() を呼び出す追加の lua ファイルをロードします。

4

1 に答える 1