我一直在這個問題上停留很長時間。我的代碼很大,我盡我所能來提取有問題的代碼。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崩潰了,我現在很確定我沒有做任何事情,但是爲什麼指針作爲一個元素被改變了?
請幫幫我!非常感謝!
在你的代碼的戰略點放置數據中斷點,看看誰是導致內存溢出的罪魁禍首 –
@ShmilTheCat謝謝你的回覆,我設置了斷點,我肯定第3行是被告。我只是不知道如何處理unordered_map中指針值奇怪的變化。 – ulyssis2
只是我,還是第2行可疑?你真的將一個字符串傳遞給'insert()'嗎?我認爲你的意思是傳遞一個'pair'或一個初始化列表。 –