You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用迭代器初始化string报transposed pointer range异常

报错原因

首先给出报错原文翻译:

debug assertion failed, exception:transposed pointer range
调试断言失败,异常:指针范围前后颠倒

问题根源出在vector的初始化语句:

vector<char> v{"h","i"};
  • 双引号包裹的"h"、"i"是字符串字面量,实际类型是const char*(指向只读常量区字符的指针),不是你预期的单个char类型字符——单个char字面量需要用单引号包裹,即'h'、'i'。
  • 由于const char*是指针类型,属于算术类型,编译器会把这两个指针的数值截断为char类型存入vector,最终vector里存的是两个完全无意义的字节值,根本不是字符'h'和'i'。这个问题编译阶段通常不会报硬错误,因为指针转char属于窄化转换,多数编译器只会抛出警告,不会阻止编译,问题会留到运行时触发。

执行string的迭代器范围构造时:

string s1(v.cbegin(), v.cend());

这个构造函数要求传入的两个迭代器必须满足[begin, end)的合法范围,也就是起始迭代器的位置不能晚于结束迭代器。由于vector里存的两个字节是随机截断的指针值,大概率第一个元素的数值大于第二个元素,相当于传入的起始位置在结束位置之后,STL的Debug调试模式会检测到这种非法范围,直接触发断言报错。

修复方案

将vector初始化时的双引号替换为单引号,保证存入的是合法的char类型值即可:

vector<char> v{'h','i'};
string s1(v.cbegin(), v.cend());

修复后代码可以正常运行,s1的内容为字符串"hi"。

内容的提问来源于stack exchange,提问作者yemeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:27:27