Использование ini файла, в том же каталоге как приложение, позволяет создать резервную копию его с приложением. Таким образом, после перезагрузки ОС Вы просто восстанавливаете каталог приложения, и у Вас есть своя конфигурация путем, Вы хотите его.
Исключение на самом деле вызывает не malloc / free, а «новый», который определенно присутствует в C ++ части вашего приложения. Похоже, вы предоставляете параметр, который слишком велик для «нового» для выделения.
'std :: bad_alloc' вызывается, например, следующим кодом:
int * p = new int[50000000];
Что говорит обратная трассировка, когда вы загружаете аварийный дамп в gdb? Если вы не можете сгенерировать дамп, вы можете попросить GDB остановить при возникновении или обнаружении исключения . К сожалению, некоторые версии GDB поддерживают только следующий синтаксис:
catch throw
, который позволяет вам прервать работу приложения при возникновении любого исключения. Однако в справке вы увидите, что в более новых версиях должна быть возможность запускать
catch throw std::bad_alloc
.
И не забывайте, что:
(gdb) help catch
- хороший источник другой полезной информации.
Вполне возможно, что это происходит из-за того, что некоторая память перезаписывается, тем самым нарушая состояние системы распределения памяти (которое обычно сохраняется до или после того, как блоки памяти возвращаются приложению).
Если у вас есть возможность (например, вы используете x86 Linux), запустите вашу программу в Valgrind , он часто может показать вам, где именно происходит коррупция.