編集:解決しました、私は方法を知っていますが、理由がわかりません。
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
はcounterのように使用し、0から開始します。最初の11個の挿入要素はOKですが、12番目の要素でsigsegvを取得しstruct equal_to
、stl_function.h(209)でエラーが発生します。
デバッガーで、unordered_mapのbucket_countが11に等しいことを確認しました。おそらく、何かの手がかりになります。
私のコンパイラはgcc4.6.1です。
たぶん、あなたは一般的に何がsigsegvを引き起こす可能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
等しいかは関係ありません。