容器size()无符号数导致的for循环崩溃

1.问题描述

容器size()无符号数导致的for循环崩溃
for (int index = 0; index < static_cast(intVec.size())-1; index++)
{
printf(“%d”,intVec[index]);
}
如果不做强转,可能会有两个问题:
(1)编译不过
(2)intVec[index]越界崩溃

2.测试

(1)编译不过容器size()无符号数导致的for循环崩溃_第1张图片
Windows编译成功Windows编译成功

在这里插入图片描述
Linux编译警告

(2)intVec[index]越界崩溃
容器size()无符号数导致的for循环崩溃_第2张图片
崩溃了。

原因分析

打一下日志,发现(intVec.size())-1的unsigned int类型其实是429496…,在这篇有推导这个原因,负数强制转换为无符号数出错,所以for循环会进。
容器size()无符号数导致的for循环崩溃_第3张图片
容器size()无符号数导致的for循环崩溃_第4张图片

3.避免问题

(1)如问题描述中的,对vec.size()做一次强转;
(2)判断一下vec.size()-1 大于0。

你可能感兴趣的:(c++)