Задать вопрос
@frank_sider
Системный программист

Почему при добавлении элемента в QMap вылетает ошибка SEGFAULT?

Доброго времени суток, коллеги! Есть такой код:
/*!
 * \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), вылетает та же ошибка.

Как это обойти?
  • Вопрос задан
  • 291 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы