Visual Studio 2015中使用_ITERATOR_DEBUG_LEVEL 0进行字符串流访问冲突

时间:2017-03-10 09:43:52

标签: c++ visual-c++ visual-studio-2015

我偶然发现了在Visual Studio 2015中以DEBUG模式编译的问题,我在下面的代码中遇到了访问冲突错误(在发布模式下还是_ITERATOR_DEBUG_LEVEL 12) 。问题只是浮出水面,因为我在项目属性中设置了_ITERATOR_DEBUG_LEVEL=0(为了简单起见,我在这里添加了#define,这也导致了错误):

#define _ITERATOR_DEBUG_LEVEL 0

#include <iostream>
#include <string>
#include <sstream>

bool try_parse(const std::string& s, double& v)
{
    std::stringstream stream;

    std::locale invariant_number_locale{ std::locale{ "" }, new std::numpunct<char>() };

    stream.imbue(invariant_number_locale);

    stream << s;

    stream >> v;

    return !stream.fail();
}

int main()
{
    double v;
    std::string s = "123";

    try_parse(s, v);

    std::cout << "d = " << v << std::endl;

    std::cout << "Done...";
    std::getchar();

    return EXIT_SUCCESS;
}

问题似乎在stream.imbue(invariant_number_locale);行。

1 个答案:

答案 0 :(得分:2)

似乎答案是如果你使用facet,你必须在调试模式下使用_ITERATOR_DEBUG_LEVEL=2按照这个线程:

https://connect.microsoft.com/VisualStudio/feedback/details/2655363

感谢@HansPassant指出我正确的方向。