Edit # 3:Luabridge: повреждение кучи (_CrtIsValidHeapPointer) Вытащите
Мой двигатель настроен следующим образом:
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, вызывает ли это проблему?
Что может вызвать ошибку кучи? Должен ли я подходить к этому по-другому?
Вот логика в двигателе:
игры (Singleton)
Содержит DisplayObjects
(вектор DisplayObject
)
Lua Bound Класс:
Звонки Game::Singleton
CreateDisplayObject
, получает указатель на последний объект в DisplayObjects
Имеет Remove()
функцию, которая вызывает Game::Singleton
RemoveDisplayObject
и передает указатель из CreateDisplayObject
< ---- Это вызывает повреждение кучи (при вызове vector.clear()). Поэтому удаление элементов из вектора вызывает ошибку кучи.
Имеет некоторые дополнительные функции, которые работают с DisplayObject
, как перемещение вокруг, без повреждения кучи.
Lua:
Другой класс оборачивает Lua Bound класс
содержит Remove()
функцию, которая вызывает Lua Bound Класс Remove()
В один момент двигатель будет загружать дополнительный lua, который вызывает Remove() в классе lua.
Какова память, выделенная для отдельного 'DisplayObject'? Можете ли вы добавить код, который выделяет и вставляет новую запись в 'DisplayObjects'? При изменении на необработанный указатель 'clear()' не будет «удалять» их, что приведет к утечке памяти. – hmjd
покажите нам свой код привязки –
Я думаю, что проблема связана со связыванием, а не с самим Lua и/или с указателем. –