Я застрял на этом очень долго. мои коды большие, я стараюсь изо всех сил абстрагировать проблемные коды.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
и адрес interestedInfo указываемой Info
(или сказать, стоимость самого Info
),
index1 0x9765ad8
...
во втором времени доступа, распечатайте то же содержание:
index1 0x98ba128
......
значение указателя Info
изменяется! Я предполагаю, что это изменение приводит к сбою line3,
Теперь я уверен, что ничего не сделал для myMap
, но почему изменился указатель как элемент?
Пожалуйста, помогите! Большое спасибо!
Поместите точки перетаскивания данных в стратегическую точку вашего кода, чтобы узнать, кто является виновником, который приводит к переполнению памяти. –
@ShmilTheCat благодарит за ответ, я установил контрольные точки, я уверен, что строка 3 является ответчиком. Я просто не знаю, как справиться со странным изменением значения указателя в unordered_map. – ulyssis2
Это только я, или линия 2 подозревается? Вы фактически передаете строку в 'insert()'? Я думаю, вы хотите передать либо пару или список инициализаторов. –