0

私はこれに非常に長い間立ち往生しています。私のコードは大きいので、問題のあるコードを抽象化するために最善を尽くします。

私は C++ でプログラミングしており、unordered_map を使用していくつかの変数を格納しています。

class INFO
   {int interestingInfo1;
   double interestingInfo2;}
INFO *info;
typedef std::tr1::unordered_map<index,Info*,hashIndex> newMap;

line1:newMap myMap;
line2:myMap[index]=info;
line3:myMap[index]->interestedInfo1;

私のプログラムでは、すべてのオブジェクトが複数回アクセスされます。アクセスの最初のラウンドでは、 unordered_map がうまく機能しInfo、 が指す興味のある情報を取得できますが、同じオブジェクトが 2 番目のラウンドでアクセスされると、3 行目のコード intriguers エラーが発生します。のSegmentation fault

myMap の要素を出力します。これindexには、interestedInfo が指すアドレスInfo(つまり、Infoそれ自体の値)が含まれます。

index1  0x9765ad8 
... 

2 回目のアクセスでは、同じ内容を出力します。

index1 0x98ba128
......

ポインタの値Infoが変更されました! この変更により line3 がクラッシュすると思いますが、

に対して何もしていないことは確かですがmyMap、要素としてのポインターが変更されたのはなぜですか?

私を助けてください!どうもありがとう!

4

1 に答える 1

0

カスタムハッシュアルゴリズムが疑わしいと思います。アクセスするたびに何かが異なる結果を生成する原因になっていると思います(おそらく、その間に何かを変更しましたか?)そのキーでアクセスすると、同じ値、または任意の値が生成されなくなります。したがって、セグメンテーション違反です。

于 2013-03-30T23:12:38.983 に答える