1.问题描述
容器size()无符号数导致的for循环崩溃
for (int index = 0; index < static_cast(intVec.size())-1; index++)
{
printf(“%d”,intVec[index]);
}
如果不做强转,可能会有两个问题:
(1)编译不过
(2)intVec[index]越界崩溃
2.测试
(1)编译不过
Windows编译成功
Linux编译警告
(2)intVec[index]越界崩溃
崩溃了。
原因分析
打一下日志,发现(intVec.size())-1的unsigned int类型其实是429496…,在这篇有推导这个原因,负数强制转换为无符号数出错,所以for循环会进。
3.避免问题
(1)如问题描述中的,对vec.size()做一次强转;
(2)判断一下vec.size()-1 大于0。