внезапная ошибка сегментации с оптимизированным значением

У меня есть 2 среды работы:

  • Ноутбук с Debian на VirtualBox
  • ПК с нормально установленной версией Debian

Я использую две системы, потому что некоторые H / W не работают с VB.
Проект включает в себя использование pthreads и ncurses.

Внезапно у меня возникает ошибка seg-fault на ПК, когда в то же время все работает нормально на ноутбуке + VB. Ошибка в линии не связана ни с pthreads, ни с ncurses
Я использую Eclipse для разработки своего программного обеспечения, процедура переноса проектов была:

  1. копировать файлы с ноутбука на USB-накопитель
  2. Импорт проекта в рабочую область Eclipse на ПК

До сих пор все было в порядке. Настройки цепочки инструментов кажутся одинаковыми на обоих.

КОД:

Config::~Config() {
std::map<std::string, Setting*>::iterator configIterator;
for(configIterator = config.begin(); configIterator != config.end(); ++configIterator){
delete configIterator->second;
}
config.clear();
}

ошибка seg появляется на удалять оператор. При проверке существования объекта перед дель, похоже, все они в памяти.

это способ добавления записей конфигурации:

config.insert(std::pair<std::string,Setting*>("language", new Setting("en_en")));

Мой вопрос двойной:

  1. Почему я оптимизировал значения даже с -O0?
  2. Что я должен искать, чтобы выяснить, почему это происходит?

Я знаю, что это что-то выделяющее или освобождающее память, но я даже не знаю, с чего начать. Я пытался удалить часть кода с ошибками, но это дало мне больше ошибок в неизвестных местах.

[РЕДАКТИРОВАТЬ] @ комментарии ниже:

Я обнаружил, что фактическая ошибка в перегруженном методе приведения оператора к строке, но:

Setting::operator std::string(){
std::stringstream sstr;
switch(what){
case STRING: sstr << str; break;
case INT: sstr << i; break;
case FLOAT: sstr << f; break;
default: sstr << str; break;
}
sstr << std::flush;
return sstr.str();
}

когда я изменяю это для ТОЛЬКО возврата некоторой фиктивной строки, такой как >> return «x» << Сег-вины нет.
Итак … что не так с кодом выше? И почему это работает на VB, но не на ПК.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector