CImg在调试模式下引发异常,在Release中运行良好

时间:2019-03-16 20:21:55

标签: c++ libjpeg cimg

我的程序是用C ++编写的。我使用Visual Studio 2017。

我的代码可以编译并在发布模式下正确运行,但是在调试模式下会抛出异常

  

未处理的异常位于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 :(得分:0)

我已经根据this answer更新了jpeg库,问题消失了。