• C/C++中size_t潜在的问题


      在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

  • 相关阅读:
    php5使用docker工具安装mcrypt
    golang 三目运算的实现
    图片壁纸
    使用golang实现栈(stack)
    Qt 异常处理 QT_TRY和QT_CATCH
    OpenCV 实现图片HDR功能
    OpenCV HDR合成
    OpenCV .直方图均衡 CLAHE算法学习
    OpenCV 直方图均衡化原理
    OpenCV 直方图绘制以及直方图均衡化
  • 原文地址:https://www.cnblogs.com/stevenshen123/p/10458187.html
Copyright © 2020-2023  润新知