2013-03-30 22 views
0

我一直在這個問題上停留很長時間。我的代碼很大,我盡我所能來提取有問題的代碼。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,包括index並指出由Info的interestedInfo的地址(或者說,的Info本身的值),

index1 0x9765ad8 
... 
在第二時間訪問

,打印出相同的內容:

index1 0x98ba128 
...... 

指針Info的值被改變了!我想這個變化讓line3崩潰了,我現在很確定我沒有做任何事情,但是爲什麼指針作爲一個元素被改變了?

請幫幫我!非常感謝!

+0

在你的代碼的戰略點放置數據中斷點,看看誰是導致內存溢出的罪魁禍首 –

+0

@ShmilTheCat謝謝你的回覆,我設置了斷點,我肯定第3行是被告。我只是不知道如何處理unordered_map中指針值奇怪的變化。 – ulyssis2

+0

只是我,還是第2行可疑?你真的將一個字符串傳遞給'insert()'嗎?我認爲你的意思是傳遞一個'pair'或一個初始化列表。 –

回答

0

我認爲你的自定義哈希算法可能是可疑的。我想,有些東西會導致它在你訪問它的不同時間時產生不同的結果(也許你改變了中間的東西?),這樣當你通過這個鍵訪問它時,它不再爲這個問題產生相同的價值 - 或者任何價值,因此分段錯誤。

+0

newMap中元素的索引是不同的(它們實際上是IPV4Address),哈希函數將地址作爲int返回。因此我認爲不可能爲不同的關鍵值生成相同的值。 – ulyssis2

相關問題