Доброго времени суток, коллеги! Есть такой код:
/*!
* \brief createModelingObjects создает объекты для моделирования
* \param modelingObjMgr менеджер объектов моделирования
*/
void ModelingModeBuilder::createModelingObjects(ModelingObjectsManager* modelingObjMgr)
{
modelingObjMgr->addModelObject("Gear", new GearModelObject);
}
/*!
* \brief addModelObject добавляет объект моделирования в таблицу объектов
* \param modelObjectName наименование объекта моделирования
* \param modelObject добавляемый объект моделирования
*/
void ModelingObjectsManager::addModelObject(const QString& modelObjectName, ModelObject *modelObject)
{
modelObjects.insert(modelObjectName, modelObject); //здесь происходит SEGFAULT
}
Поле modelObjects в классе ModelingObjectsManager объявлено в классе как
QMap<QString, ModelObject*> modelObjects.
С помощью отладчика установил, что вылет происходит в методе detach класса QMap. Пробовал объявлять modelObjects через указатель, а конструкторе ModelingObjectsManager писал
modelObjects = new QMap<QString, ModelObjects*>().
Результата не дало, вылетает та же ошибка. Этот код работает в отдельной dll, которая статически линкуется к exe'шнику. Пробовал код dll вставлять в проект exe'шника, тоже результата не дало, думал, что в Qt та же проблема с контейнерами, что и в STL от мелкософта.
Работаю в Windows 7 x64 Ultimate. Версия Qt 5.5.0. Система сборки CMake. Компилятор от Visual Studio 2010. Пробовал собирать через MinGW (Qt 5.4.2), вылетает та же ошибка.
Как это обойти?