我已经被这个问题困扰很长时间了。我的代码很大,我尽量把有问题的代码抽象出来。
我用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中的元素,包括index
和Info
所指向的感兴趣的dinfo的地址(或者说是Info
本身的值),
index1 0x9765ad8
...
在第二次访问时,打印出相同的内容:
index1 0x98ba128
......
指针Info
的值被修改了!我猜这个改变使line3崩溃,
我现在很确定,我没有做任何myMap
,但为什么指针作为一个元素被改变?
请帮帮我!很多谢谢!
我认为你的自定义哈希算法可能是可疑的。我想是什么东西导致它产生不同的结果在不同的时间你访问它(也许你改变之间的东西?),这样当你访问它在该键不再产生相同的值-或任何值,就此而言,因此分割错误。