0

我有一个 c++ 程序,它接受一个地图文本文件并将其输出到我制作的图形数据结构中。我正在使用 QT,因为我需要跨平台程序和 GUI 以及地图的可视化表示。我有几张不同尺寸的地图(8x8 到 4096x4096)。我正在使用 unordered_map,向量作为键,顶点作为值,我正在发送 hash(1) 和我在创建时写入 unordered_map 的 equal 函数。

在 QT 下,我正在使用 QT 4.8.1 for desktop 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?

4

0 回答 0