qt4 — программа на c ++ хорошо отлажена с Cygwin4 (под Netbeans 7.2), но не с MinGW (под QtCreator 4.8.1)

У меня есть программа на С ++, которая берет текстовый файл карты и выводит его в созданную мной структуру данных графика. Я использую QT, так как мне нужна кроссплатформенная программа и графический интерфейс, а также визуальное представление карты. У меня есть несколько карт разных размеров (от 8х8 до 4096х4096).
Я использую unordered_map с вектором в качестве ключа и вершину в качестве значения, я отправляю hash (1) и равные функции, которые я написал в unordered_map при создании.

Под QT я отлаживаю свою программу с QT 4.8.1 для настольного MinGW (QT SDK), программа работает и хорошо отлаживает, пока я не попробую самую большую карту 4096×4096, затем программа застревает со следующей ошибкой:

подчиненный остановился, потому что получил сигнал от операционной системы

При отладке программа останавливается в хэш-функции, которая используется внутри unordered_map и не как часть состояния вставки, а в getter (2).

Под Netbeans IDE 7.2 и Cygwin4 все работает нормально (отладка и запуск).

Некоторая информация о коде:

    typedef std::vector<double> coordinate;
`typedef std::unordered_map<coordinate const*, Vertex<Element>*, container_hash, container_equal> vertexsContainer;`

`vertexsContainer *m_vertexes`

(1) хеш-функция:

struct container_hash
{
size_t operator()(coordinate const *cord) const
{
size_t sum = 0;
std::ostringstream ss;

for ( auto it = cord->begin() ; it != cord->end() ; ++it )
{
ss << *it;
}

sum = std::hash<std::string>()(ss.str());
return sum;
}
};

(2) добытчик:

template <class Element>
Vertex<Element> *Graph<Element>::getVertex(const coordinate &cord)
{
try
{
Vertex<Element> *v = m_vertexes->at(&cord);
return v;
}
catch (std::exception& e)
{
return NULL;
}
}

Я подумал, может быть, это была какая-то проблема с памятью в начале, поэтому, прежде чем подумать о попытке Netbeans, я проверил это с помощью QT на моем другом компьютере с 16 ГБ ОЗУ и получил ту же ошибку.

Обновить:
Я пытаюсь запустить это на Visual Studio 2012, я получил ошибку bad_alloc, которая остановила мою программу, при просмотре диспетчера задач я увидел, что объем памяти, выделенной для программы, увеличился до 2 ГБ, может быть, это потому, что это 32-битная программа?

Обновить
Я отлаживал свою программу под NetBeans с 32-битной архитектурой и Cygwin4, и все работало нормально, так что, возможно, это не 32-битная проблема, также память, используемая с NetBeans, была 1,5 ГБ, так как в MinGW и VS2012 она достигает 2 ГБ?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]