Иногда при выполнении я получаю это сообщение об ошибке в VS2010 при попытке освободить память:
Windows запустила точку останова в [APPNAME] .exe.
Это может быть связано с повреждением кучи, что указывает на ошибку в [APPNAME] .exe или любой из загруженных им библиотек DLL.
Это также может быть связано с тем, что пользователь нажимает клавишу F12, когда [APPNAME] .exe имеет фокус.
Окно вывода может содержать больше диагностической информации.
Что означает что-то не так с кучей или указателем.
Моя проблема в том, что эта ошибка приводит к сбою моего приложения при его сборке в виде выпуска.
Кроме того, это просто модуль более крупного приложения, и когда происходит сбой, все исчезает.
Я бы хотел справиться с этой ошибкой.
Из MSDN на "бесплатно":
Если при освобождении памяти возникает ошибка, то errno устанавливается с информацией из операционной системы о характере сбоя. Для получения дополнительной информации см. Errno, _doserrno, _sys_errlist и _sys_nerr.
Существует функция errno_t _get_errno( int * pValue );
, которая возвращает код ошибки.
Если я нажимаю продолжить в сообщении об ошибке, показанном выше, эта функция возвращает код ошибки.
С помощью этого кода я могу обнаружить ошибку, создать стек вызовов и тихо завершить работу моей функции.
Есть ли какой-нибудь переключатель компилятора или что-то такое, чтобы предотвратить сбой приложения при сбое free и позволить мне выйти из него по-своему ??