首页 > 解决方案 > 如果我们在 c++ 中 basic_string 达到 max_size 之后再添加一个字符会发生什么

问题描述

#0 0x00008432126cda64std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::empty() const ()来自 /lib64/libstdc++.so.6

代码在 libstdc++ empty() 函数处崩溃

bool empty() const _NOEXCEPT
    {   // test if sequence is empty
    return (this->_Mysize == 0);
    }

这是标准的空函数

标签: c++libstdc++

解决方案


Stadnard [string.require/1]中定义了会发生什么:

如果任何操作会导致size()超出max_­size(),则该操作将引发类型异常对象length_­error

目前尚不清楚这个问题是关于什么的,因为标题与文本/代码不对应。唯一可能失败的操作empty是取消引用this。因此,您似乎正在调用empty一个无效的指针,例如一个不再存在(已被销毁)的对象。


推荐阅读