c++ - 使用 boost regex lib 时 C++ 断言崩溃
问题描述
我刚刚安装了boost
lib 并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 和boost
lib,但问题仍然存在。
任何想法可能是错误的原因?
解决方案
断言在这里:
#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 开发人员报告错误(以防缓冲区大小问题不是记录在案的限制)
推荐阅读
- javascript - 无法从网页中获取所有“div”元素
- flutter - 插件项目:location_web 未找到。请更新 settings.gradle
- asp.net-core - 使用 Identity Server 4 的不带登录对话框的自动 Windows 身份验证
- angular - 如何将链接添加到角度材质树
- php - PHP棘轮/棘爪返回数据而不是打印
- c - 谁能弄清楚如何扩展这个软件除法程序以获得 16 位商
- c# - 使用 exceldna 单击功能区按钮时获取 excel 选择内容
- excel - 如何使用宏扩展图表中包含的范围
- sql - 重命名 SQL 表中的所有列名
- django - Django rest框架查询?每个待办事项都有一个团队所有者。我想查询每个团队的所有待办事项。所以