unordered_map,映射值会自动更改,信号'SIGSEGV'接收。说明:分段错误



我已经被这个问题困扰很长时间了。我的代码很大,我尽量把有问题的代码抽象出来。

我用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指向的感兴趣的信息,但是在第二轮访问同一对象时,第3行代码会引起Segmentation fault的错误。

我打印出myMap中的元素,包括indexInfo所指向的感兴趣的dinfo的地址(或者说是Info本身的值),

index1  0x9765ad8 
... 
在第二次访问

时,打印出相同的内容:

index1 0x98ba128
......

指针Info的值被修改了!我猜这个改变使line3崩溃,

我现在很确定,我没有做任何myMap,但为什么指针作为一个元素被改变?

请帮帮我!很多谢谢!

我认为你的自定义哈希算法可能是可疑的。我想是什么东西导致它产生不同的结果在不同的时间你访问它(也许你改变之间的东西?),这样当你访问它在该键不再产生相同的值-或任何值,就此而言,因此分割错误。

最新更新