在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

最新文章

  1. 2、C#核心编程结构
  2. 基于浏览器的HTML5地理定位
  3. Tomcat服务器8080端口占用报错
  4. BOOL in Object-C
  5. error: linker command failed with exit code 1 解决方法之一
  6. lambda 的使用汇总
  7. Leveldb Advanced
  8. Observer 模式
  9. JavaScript Arguments 实现可变参数的函数,以及函数的递归调用
  10. C# 继承细节
  11. FreeType in OpenCASCADE
  12. LCD接口和RGB介绍【转】
  13. mysql创建唯一索引,避免数据重复插入
  14. 在eclipse上集成安装阿里巴巴代码规约P3C插件
  15. Shell脚本出现$&#39;\r&#39;: command not found
  16. Xshell5 提示要继续使用此程序,您必须应用最新的更新或使用新版本
  17. 项目中PO、PM的职责区分
  18. TF之AE:AE实现TF自带数据集数字真实值对比AE先encoder后decoder预测数字的精确对比—Jason niu
  19. 为虚拟机配置固定ip地址
  20. [原]openstack-kilo--issue(九) heat stacks topology中图形无法正常显示

热门文章

  1. Django 基本使用及目录结构
  2. pygame 浅解
  3. python3练习100题——027
  4. C++-POJ1017-Packets
  5. Html5 Canvas 使用
  6. winform学习(11)Timer控件
  7. Python记通用列表操作之切片!
  8. Spark学习笔记1
  9. MySQL-THINKPHP 商城系统一 商品模块的设计
  10. 【做题笔记】[NOIOJ,非NOIp原题]装箱问题