首页 > 解决方案 > 使用 boost regex lib 时 C++ 断言崩溃

问题描述

我刚刚安装了boostlib 并visual studio在我的新笔记本电脑上。

尝试运行我的代码时出现以下错误:

Assertion failed: r != 0, file libs\regex\build\..\src\w32_regex_traits.cpp, line 125

在 debug 32bit 中运行时会发生该错误,但在使用 release 而不是 debug 时有效。这是我的片段:

#include <iostream>
#include <boost/regex.hpp>
int main()
{
     boost::regex("hello word", boost::regex::icase);
}

我尝试重新安装 VS2019 和boostlib,但问题仍然存在。

任何想法可能是错误的原因?

标签: c++boostboost-regex

解决方案


断言在这里:

#ifndef BOOST_NO_ANSI_APIS
   int r = ::LCMapStringA(this->m_locale, LCMAP_LOWERCASE, char_map, 1 << CHAR_BIT, this->m_lower_map, 1 << CHAR_BIT);
   BOOST_ASSERT(r != 0);
#else

看起来LCMapStringA 函数 失败了。

如果不成功,此函数返回 0。要获取扩展错误信息,应用程序可以调用 GetLastError,它可以返回以下错误代码之一:

  • ERROR_INSUFFICIENT_BUFFER. 提供的缓冲区大小不够大,或者它被错误地设置为 NULL。
  • ERROR_INVALID_FLAGS. 为标志提供的值无效。
  • ERROR_INVALID_PARAMETER. 任何参数值无效。

我不认为这些条件是可以忽略的。它们可能会导致未定义的行为。因此,也许您可​​以使用调试器GetLastError在无法获取更多信息时获取 的值。

取决于你失败的类型

  • 修复您的系统配置(可能缺少语言环境支持?)
  • 修复您的输入(也许您的输入包含无效编码)
  • 向 boost 开发人员报告错误(以防缓冲区大小问题不是记录在案的限制)

推荐阅读