вы запускаете ваше приложение (скомпилированное в режиме отладки) с синтаксисом:
valgrind yourapp
Valgrind покажет вам трассировку стека, где произошла ошибка сегментации. После этого вам решать, что произошло, и исправить это.
В вашем коде, независимо от valgrind, я бы проверил, что возвращает cont[ "some_key" ]
Наиболее вероятная причина вашего segfault заключается в том, что возвращаемое значение является неким диким указателем или не инициализируется вообще. В этом случае любая попытка доступа к нему, например cont["some_key"][0]
, также приведет к ошибке сегментации.
Еще одна идея: как насчет строковых ключей на вашей карте? Возможно ли, что некоторые из них молча (без исключения) не смогли выделить часть данных строки, используемой в качестве ключа. Std :: map - это не хеш-таблица, а просто какой-то упорядоченный контейнер. При поиске ключа может потребоваться доступ к другим ключам, и там может произойти дерьмо. Чтобы проверить, что вы можете попытаться выполнить итерацию по всем ключам на вашей карте и показать содержимое (чтобы увидеть, возникает ли проблема именно с «some_key» или если вы ничего не можете получить в карте.
Вы также можете попробовать использовать unordered_map, если ваша программа не нуждается в упорядочении, чтобы увидеть, является ли поведение таким же.