C ++ assert () завершается ошибкой, не выдавая сообщения об ошибке или строки, в которой произошла ошибка - PullRequest
2 голосов
/ 26 ноября 2010

У меня странная проблема в моем коде. У меня есть много утверждений, разбросанных по коду, и все работает нормально. Всякий раз, когда подтверждение не удавалось, я получал сообщение с номером строки, где произошел сбой. Сегодня я написал еще одно утверждение в функции, которая загружает файл. Просто хотел убедиться, что тьфу существует. Очень простое утверждение. Вот соответствующий код:

//Check that the file exists and can be opened
FILE* f = fopen(filename, "rb");

#ifdef ASSERTIONS_ON
    assert(f!=NULL);//@problem For some reason while all other asserts work, this one just crashes the program without reporting line
#else
    if(f  == NULL)
        return MODEL_LOAD_FILENOTFOUND;
#endif

fclose(f);

Я знаю, что это не очень помогает, но просто хотел продемонстрировать, в чем моя проблема. Моя ОС - Windows 7. Компилятор - GCC. Сообщение об ошибке, которое я получаю из Windows, является обычной ошибкой во время выполнения, но без отчета о строке:

"Приложение запросило среду выполнения, чтобы прекратить его необычным способом. Для получения дополнительной информации обратитесь в службу поддержки приложения"

В чем может быть проблема? Что может привести к тому, что assert не сможет просто запросить завершение, не сообщив о строке, где это происходит, в то время как в любом другом случае в том же коде это работает как задумано? Заранее спасибо за любую помощь!

1 Ответ

6 голосов
/ 26 ноября 2010

Скорее всего, вы выполнили стек в FUBAR перед выполнением assert.

...