微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在循环中使用 size_t 会抛出错误“std::length_error”

如何解决在循环中使用 size_t 会抛出错误“std::length_error”

我在 for 循环中遇到错误,如果 str.size() = 1 那么它会抛出错误

在抛出 'std::length_error' 实例后调用终止
what(): basic_string::_M_create

但如果 str.size() 大于 1,则一切顺利。 此外,当我将 size_t 更改为 int 时一切正常。为什么?

for (size_t i = str.size() - 1; i >= 0; i--)
        excess3(str[i]);

这里的str是字符串的向量

解决方法

size_t 是无符号类型,因此条件 i >= 0; 将始终评估为真,并且循环永远不会结束。

要么将 i >= 0 替换为 i != 0(并确保永远不要使用空向量进入循环),或者将循环变量从 size_t 更改为像 {{1} 这样的有符号类型}}。

,

size_t 是无符号的。如果 str.size() == 1 则 i 被初始化为 0。第一次通过循环是可以的。第二遍递减 i 并使其在无符号世界中变得非常大。在 32 位系统上,它将是 0xFFFFFFFF,当然它大于零。尝试 ssize_t 而不是 size_t。它是有符号的变体。这也是 int 有效的原因。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。