У меня есть 2 среды работы:
Я использую две системы, потому что некоторые H / W не работают с VB.
Проект включает в себя использование pthreads и ncurses.
Внезапно у меня возникает ошибка seg-fault на ПК, когда в то же время все работает нормально на ноутбуке + VB. Ошибка в линии не связана ни с pthreads, ни с ncurses
Я использую 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")));
Мой вопрос двойной:
Я знаю, что это что-то выделяющее или освобождающее память, но я даже не знаю, с чего начать. Я пытался удалить часть кода с ошибками, но это дало мне больше ошибок в неизвестных местах.
[РЕДАКТИРОВАТЬ] @ комментарии ниже:Я обнаружил, что фактическая ошибка в перегруженном методе приведения оператора к строке, но:
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, но не на ПК.
Задача ещё не решена.
Других решений пока нет …