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

LeetCode 1047:修改判断条件后代码出现溢出错误的原因

问题原因分析

核心问题出在C++中string::length()的返回值类型上:它返回的是无符号整数类型size_t,而非有符号的int,这直接导致了运算逻辑的异常。

具体拆解错误触发过程:

  • 当ans是空字符串时,ans.length()返回0,且这个0是size_t类型的无符号值。
  • 执行ans.length() - 1时,由于无符号整数不允许负数,会发生无符号下溢:0减1的结果会被转换为size_t能表示的最大值(比如64位系统中是18446744073709551615)。
  • 这个最大值必然满足>= 0的条件,所以原本应该跳过的判断(空字符串时不访问最后一位)现在成立了,代码会执行ans[ans.length()-1]——也就是访问ans的一个远超有效范围的索引位置,直接触发内存访问溢出错误。

而原代码中的ans.length() > 0是正确的:因为size_t是无符号类型,0 > 0的结果为false,空字符串时会直接进入else分支,不会执行越界访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:37:05