gpt4 book ai didi

c++ - 是什么导致 boost::lower 使 is_singular 断言失败?

转载 作者:太空狗 更新时间:2023-10-29 20:31:21 25 4
gpt4 key购买 nike

当在 std::wstring 上调用时,我偶尔会从 boost::lower 得到奇怪的行为。特别是,我看到以下断言在发布版本中失败(但在调试版本中不是):

Assertion failed: !is_singular(), file C:\boost_1_40_0\boost/range/iterator_range.hpp, line 281 

我还看到在以下上下文中调用 boost::to_lower 后似乎是内存错误:

void test(const wchar_t* word) {
std::wstring buf(word);
boost::to_lower(buf);
...
}

将调用 boost::tolower(wstr) 替换为 std::transform(wstr.begin(), wstr.end(), wstr.begin(), towlower) 似乎解决了这个问题;但我想知道出了什么问题。

我最好的猜测是,问题可能与更改 unicode 字符的大小写有关——也许小写字符的编码大小与源字符的编码大小不同?

有人知道这里会发生什么吗?如果我知道“is_singular()”在 boost 上下文中的含义可能会有所帮助,但在进行了几次谷歌搜索后,我无法找到它的任何文档。

相关软件版本:Boost 1.40.0; MS Visual Studio 2008。

最佳答案

经过进一步的调试,我明白了这是怎么回事。

我遇到麻烦的原因是解决方案中的一个项目没有定义 NDEBUG(尽管处于 Release模式),而所有其他模块都定义了。 Boost 在其数据结构中分配了一些额外的字段,用于存储调试信息(例如数据结构是否已初始化)。如果模块 A 关闭了调试,那么它将创建不包含这些字段的数据结构。然后,当打开调试的模块 B 获取该数据结构时,它将尝试检查那些字段(未分配),从而导致随机内存错误。

在解决方案的所有 项目中定义 NDEBUG 解决了这个问题。

关于c++ - 是什么导致 boost::lower 使 is_singular 断言失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com