【问题标题】:using size_t inside for loop throwing error "std::length_error" [duplicate]在 for 循环中使用 size_t 抛出错误“std::length_error”[重复]
【发布时间】:2020-12-25 05:16:38
【问题描述】:

我在 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是字符串的向量

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-10-18
        • 2018-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        • 1970-01-01
        相关资源
        最近更新 更多