C/C++中size_t潜在的问题
2024-09-04 21:03:30
在C++中,利用数组下标访问数组元素时,常常将下标类型定义为size_t类型,因为正常来说,数组的下标就是size_t类型。例如这样:
for (size_t i = 0; i < container.size(); ++i)
然而具体来说,size_t是一个和机器相关的unsigned类型。重点就在于... size_t是一个unsigned类型的数值类型。因而,在C/C++中涉及到size_t和int型数据转换传递时,就需要注意...
尽管这个问题经常被老师和书籍指出来需要重视,然而今天还是踩了坑...
如下,是我写的一个快排(quicksort),实现对std::vector中的元素(类型由模板确定)进行升序排序(默认该类型定义了<=, >符号操作):
在程序运行时就会发现,这个代码... 偶尔会出现问题(怪我数据规模设定得小,给了它正确的机会...)。
找了好久都没找到... (哭...),然后用Xcode监测了一下(这里吹一下Xcode,因为我暂时还不太会用lldb...)。终于,发现了问题,就是图片中第12行: 当j值为0时,再自减,就会变成一个很大的数值,自然就数组越界了... (当然,数组下标为任意负值时,也会导致这个问题,因此直接导致出现这种问题的原因,也是数组越界)
目前的解决方法是将这些size_t老老实实地定义成了int类型,暂时搞定了这个bug...
以后有好的办法再重整(Zhěng)...
有更好方法建议的朋友,敬请评论区斧正,感谢。
@编辑于2019.3.1
最新文章
- 2、C#核心编程结构
- 基于浏览器的HTML5地理定位
- Tomcat服务器8080端口占用报错
- BOOL in Object-C
- error: linker command failed with exit code 1 解决方法之一
- lambda 的使用汇总
- Leveldb Advanced
- Observer 模式
- JavaScript Arguments 实现可变参数的函数,以及函数的递归调用
- C# 继承细节
- FreeType in OpenCASCADE
- LCD接口和RGB介绍【转】
- mysql创建唯一索引,避免数据重复插入
- 在eclipse上集成安装阿里巴巴代码规约P3C插件
- Shell脚本出现$&#39;\r&#39;: command not found
- Xshell5 提示要继续使用此程序,您必须应用最新的更新或使用新版本
- 项目中PO、PM的职责区分
- TF之AE:AE实现TF自带数据集数字真实值对比AE先encoder后decoder预测数字的精确对比—Jason niu
- 为虚拟机配置固定ip地址
- [原]openstack-kilo--issue(九) heat stacks topology中图形无法正常显示