c++ - 如果我们在 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);
}
这是标准的空函数
解决方案
Stadnard [string.require/1]中定义了会发生什么:
如果任何操作会导致
size()
超出max_size()
,则该操作将引发类型异常对象length_error
。
目前尚不清楚这个问题是关于什么的,因为标题与文本/代码不对应。唯一可能失败的操作empty
是取消引用this
。因此,您似乎正在调用empty
一个无效的指针,例如一个不再存在(已被销毁)的对象。
推荐阅读
- postgresql - PostgreSQL 驱动程序在每个连接上运行 SQL
- linux - while循环如何等待进程
- python - Python kmeans包安装失败
- token - 使用 web3 / rpc 跟踪以太坊区块链中代币的流通
- excel - 改进 SUMPRODUCT 语句以返回多个条件
- applescript - AppleScript 可以通过本地网络启动 Quicktime 播放吗?
- visual-c++ - 从版本控制接收时缺少 Visual C++ 附加目录
- sql-server - 如果两者都为空,则返回两个日期或特定文本中的较低者
- ssis - 访问 Azure 服务总线队列的 SSIS 脚本任务引发 X.509 证书错误
- vba - 使用 VBA 文件夹选择器和 For Each 语句