c++;程序使用Cygwin4(在Netbeans 7.2下)调试得很好,但不使用MinGW(在QtCreator 4.8.1下) 我有一个C++程序,它把一个地图文本文件输出到我所做的一个图形数据结构中。我正在使用QT,因为我需要跨平台程序和GUI以及地图的可视化表示。我有几种不同尺寸的地图(8x8到4096x4096)。 我正在使用无序的_映射,向量作为键,顶点作为值,我正在发送散列(1)和相等的函数,这些函数是我在创建无序的_映射时编写的

c++;程序使用Cygwin4(在Netbeans 7.2下)调试得很好,但不使用MinGW(在QtCreator 4.8.1下) 我有一个C++程序,它把一个地图文本文件输出到我所做的一个图形数据结构中。我正在使用QT,因为我需要跨平台程序和GUI以及地图的可视化表示。我有几种不同尺寸的地图(8x8到4096x4096)。 我正在使用无序的_映射,向量作为键,顶点作为值,我正在发送散列(1)和相等的函数,这些函数是我在创建无序的_映射时编写的,c++,qt4,cygwin,mingw,netbeans-7,C++,Qt4,Cygwin,Mingw,Netbeans 7,在QT下,我正在使用QT 4.8.1 for desktop MinGW(QT SDK)调试我的程序,该程序运行良好,调试良好,直到我尝试使用最大的映射4096x4096,然后程序出现以下错误: 由于接收到来自操作系统的信号,下位机停止 调试时,程序在无序_映射内部使用的哈希函数处停止,而不是作为插入状态的一部分,而是在getter(2)处停止 在Netbeans IDE 7.2和Cygwin4下,所有这些都可以正常工作(调试并运行) 一些代码信息: typedef std::vecto

在QT下,我正在使用QT 4.8.1 for desktop MinGW(QT SDK)调试我的程序,该程序运行良好,调试良好,直到我尝试使用最大的映射4096x4096,然后程序出现以下错误:

由于接收到来自操作系统的信号,下位机停止

调试时,程序在无序_映射内部使用的哈希函数处停止,而不是作为插入状态的一部分,而是在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`
typedef标准::矢量坐标;
`typedef std::无序地图顶点容器`
`顶点容器*m_顶点`
(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;
    }
};
struct容器\u散列
{
尺寸运算符()(坐标常数*跳线)常数
{
大小总和=0;
std::ostringstream ss;
用于(自动it=cord->begin();it!=cord->end();++it)
{
ss at(电源线和电源线);
返回v;
}
捕获(标准::异常&e)
{
返回NULL;
}
}
起初我在想可能是内存问题,所以在考虑尝试Netbeans之前,我在朋友的pc上用QT检查了一下,发现了同样的错误

更新: 我试着在visual studio 2012上运行它,我遇到了一个错误,导致我的程序停止,当我查看任务管理器时,我看到分配给程序的内存增加到2GB,可能是因为它是一个32位程序

更新
我在32位体系结构和Cygwin4的Netbeans下调试了我的程序,所有这些都工作得很好,所以这可能不是32位的问题,而且Netbeans使用的内存是1.5GB,那么在MinGW和VS2012中它是如何上升到2GB的呢?

我想你是说QtCreator。是的,在32位版本的Windows上,程序有2GB的虚拟地址空间(如果系统以特定方式设置且可执行文件与特定标志链接,则为3 GB)。这意味着您不能分配超过2 GB的内存(除非您使用特定于平台的技巧,例如一次只映射分配内存的某些部分)。感谢您的澄清,但我在具有32位体系结构和Cygwin4的Netbeans下调试了我的程序,所有这些都运行良好,那么您如何解释呢?您使用的是相同的设置吗?特别是,我怀疑在VS和QtCreator下您使用的是调试设置,这可能会为调试/安全性的每个分配/元素使用更多内存功能。我正在使用Netbeans、VS和QtCreator中的调试设置…可能在一种情况下,调试功能会为每个分配/元素占用更多内存。要进行有意义的比较,您应该在发布模式下编译。
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;
    }
}