使用OpenEXR映射/设置迭代器不兼容错误并在MSVC调试模式下编译

时间:2016-05-12 09:24:59

标签: c++ visual-studio-2015 iterator debug-mode openexr

我有一个我无法弄清楚的问题。我使用OpenEXR库的项目完全适用于Linux平台。它必须在Visual Studio 2015中可编译。因此,我试图移植它。我已经成功编译并安装了OpenEXR 2.2.0版本(从official site下载instructions at GitHub)。不幸的是,我的代码遇到了几个问题。其中一个可以简化为以下小片段:

#include <OpenEXR/ImfInputFile.h>
#include <OpenEXR/ImfHeader.h>

int main(int argc, char * argv[]) {

  Imf::InputFile exr_file("test.exr");
  const Imf::Header & exr_header = exr_file.header();

  // e.g. this fails at debug assertion: map/set iterators incompatible
  bool test1 = exr_header.begin() != exr_header.end();

  // or this gets stuck somehow and consuming CPU, the program doesn't continue
  bool test2 = exr_header.begin() != exr_header.begin();

  return 0;
}

当它在发布模式下编译时似乎没问题(至少对于代码片段,我的项目还有其他一些我怀疑是相关的问题)。但是在Debug模式中,我需要调试我的项目,会发生奇怪的事情。第一个测试以调试断言结束:

Debug Assertion Failed!

Program: C:\WINDOWS\SYSTEM32\MSVCP140D.dll
File: c:\program files (x86)\microsoft visual studio 14.0\vc\include\xtree
Line: 326

Expression: map/set iterators incompatible

第二个(当第一个被注释掉时)被卡住了,程序似乎处于无限循环中。我不明白为什么。

拜托,有人可以帮帮我吗?如果重要的话,我将使用Visual Studio Community 2015。

0 个答案:

没有答案