编辑:解决了,我知道怎么做,但我不明白为什么。
我改变了variables
声明
tr1::unordered_map<int,T> variables;
至
unordered_map<int,T> variables;
它工作正常。
如果您知道原因,请将其写在答案中。
我有一个非常大的程序,所以我不知道我应该把哪个代码带到这里。
有抽象类,它与派生类一起继承。摘要有unordered_map<int,int>
(模板)作为私有成员和公共方法insert(int,int)
。
派生类使用基类insert
方法向unordered_map<int,int>
容器中插入元素,
第一个int
使用类似计数器并从 0 开始。前 11 个插入元素正常,但在第 12 个元素中我得到 sigsegv,并struct equal_to
在 stl_function.h(209) 处出错。
在调试器中,我看到 unordered_map 的 bucket_count 等于 11,这可能是一些线索。
我的编译器是 gcc 4.6.1。
也许您可以概括地写出什么会导致 sigsegv in unordered_map.insert
?
谢谢你,对我糟糕的英语感到抱歉。
我会带上具体的代码,如果我知道的话。
编辑:这是insert
方法:
virtual void Insert(int arrayPlace, T value)
{
if (!isReadOnly)
{
if (IsValueDataValid(value))
{
variables[arrayPlace] = value;
}
else
{
throw 2;
}
}
else
{
throw 4;
}
};
声明是:
tr1::unordered_map<int,T> variables;
sigsegv 发生在arrayPlace
==11 时,与value
相等无关。