c ++程序使用Cygwin4(在Netbeans 7.2下)调试好,但没有使用MinGW(在QtCreator 4.8.1下)

时间:2012-10-22 22:57:03

标签: c++ qt4 cygwin mingw netbeans-7

我有一个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?

0 个答案:

没有答案