我有一个c ++程序,它接受一个地图文本文件并将其输出到我所做的图形数据结构中。我正在使用QT,因为我需要跨平台程序和GUI以及地图的可视化表示。我有几个不同大小的地图(8x8到4096x4096)。 我使用带有向量作为键和顶点作为值的unordered_map,我发送hash(1)和相同的函数,我在创建时写入了unordered_map。
在QT下我正在使用QT 4.8.1调试我的程序用于桌面MinGW(QT SDK),该程序可以正常工作和调试,直到我尝试最大的4096x4096映射,然后程序卡住了以下错误:
下级因为收到来自操作系统的信号而停止了
调试时,程序停止在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之前,我在带有16GB RAM的朋友电脑上使用QT进行了检查并得到了相同的错误。
更新 我尝试在visual studio 2012上运行它,我得到一个bad_alloc错误,它停止我的程序,当看到任务管理器时,我看到分配给程序的内存高达2GB,可能是因为它是一个32位程序?
更新 我使用32位架构和Cygwin4在Netbeans下调试我的程序,所有工作都很好,所以也许它不是32位问题,netbeans使用的内存也是1.5GB,那么在MinGW和VS2012中它如何达到2GB?