CImg выдает исключение в режиме отладки, отлично работает в выпуске - PullRequest
0 голосов
/ 16 марта 2019

Моя программа написана на C ++. Я использую Visual Studio 2017.

Мой код компилируется и работает правильно в режиме Release, но выдает исключение в режиме Debug :

Необработанное исключение в 0x00007FF9A4EAD428 (ucrtbase.dll) в MyAssemblyName.exe: недопустимый параметр был передан функции который считает неверные параметры фатальными.

Это исключение выдается в функции img.assign()

CImg<unsigned char> img;

try {
    img.assign(picPath.c_str());
}
catch (CImgException) {
    // ...
}

В CImg это код, который выполняется:

std::FILE *const nfile = file?file:cimg::fopen(filename,"rb");
      struct jpeg_decompress_struct cinfo;
      struct _cimg_error_mgr jerr;
      cinfo.err = jpeg_std_error(&jerr.original);
      jerr.original.error_exit = _cimg_jpeg_error_exit;
      if (setjmp(jerr.setjmp_buffer)) { // JPEG error
        if (!file) cimg::fclose(nfile);
        throw CImgIOException(_cimg_instance
                             "load_jpeg(): Error message returned by libjpeg: %s.",
                             cimg_instance,jerr.message);
      }

      jpeg_create_decompress(&cinfo);
      jpeg_stdio_src(&cinfo,nfile);
      jpeg_read_header(&cinfo,TRUE);
      jpeg_start_decompress(&cinfo);

Исключение выдается при выполнении jpeg_read_header().

Почему это происходит? Почему только в режиме отладки, а не в версии?

1 Ответ

0 голосов
/ 19 марта 2019

Я обновил библиотеку jpeg в соответствии с этим ответом , и проблема исчезла.

...