codechaser
V2EX  ›  C

size_t 的使用是安全的吗?

  •  
  •   codechaser · May 21, 2019 · 4219 views
    This topic created in 2722 days ago, the information mentioned may be changed or developed.

    最近碰到个很奇怪的问题,在写 for 循环的时候 vscode 会自动把i的类型设为size_t,我看这也没改,一直用着也没事,但是昨天在写这样几句(大致差不多就这样写的)出了问题:

    const boarder = 20;
    for (size_t i = boarder; i < width;i++){
    	/**code**/
    }
    

    发现一直有错误,一直不结束循环,百思不得其解,打印 i 发现 i 的初值是个很长的负数,改成int i = boarder就没问题了.今天想到这个又回头看了一下,不能确定是不是因为size_t.

    15 replies  •  2019-05-30 23:19:02 +08:00
    jmc891205
    jmc891205
    May 21, 2019 via iPhone
    1
    为啥不声明 boarder 的类型?编译器不报错?
    codechaser
    codechaser
    OP
    May 21, 2019
    2
    @jmc891205 ...我打错了,漏了一个`int`
    maggch
    maggch
    May 21, 2019 via Android
    3
    size_t 无符号
    exonuclease
    exonuclease
    May 21, 2019 via iPhone
    4
    size_t 是无符号的
    lrh3321
    lrh3321
    May 21, 2019 via Android
    5
    size_t 无符号,--的 for 循环会永远>=0
    secondwtq
    secondwtq
    May 21, 2019❤️1
    6
    forestyuan
    forestyuan
    May 21, 2019
    7
    无符号数和有符号数比较大小,编译器会报警告。如果没报,可能是你的开发环境没有设置好。
    zwh2698
    zwh2698
    May 21, 2019 via Android
    8
    Width 类型?
    liuzhedash
    liuzhedash
    May 22, 2019
    9
    有点意思,但是没能复现
    CRVV
    CRVV
    May 22, 2019
    10
    1. size_t 当然能用,用对了就是安全的,用错了可能不安全
    2. 发代码要用复制粘贴功能,不要手动输入
    3. 发代码要把代码粘全,你发的代码编译不过
    ryd994
    ryd994
    May 22, 2019 via Android
    11
    一个单线程的用户程序,讲什么线程安全?
    codechaser
    codechaser
    OP
    May 22, 2019 via Android
    12
    @CRVV 嗯嗯,不好意思。我以为只需要贴问题代码就可以了,下次改。
    codechaser
    codechaser
    OP
    May 22, 2019 via Android
    13
    @zwh2698 width 是 opencv 图片的 width 属性
    zwh2698
    zwh2698
    May 22, 2019 via Android
    14
    Width 的类型是 int 吧,你这一句有两次转型,i 初始化的时候类型要做提升,<的时候 width 要做提升,width 是负数的时候,循环就是会很多次。你可能会说图形宽怎么有负值。正负代表的是方向。绝对值就是宽。比如位图如果是倒存的,高就是负值。你可以找个位图文件看看。
    dosmlp
    dosmlp
    May 30, 2019
    15
    size_t 虽然有不同实现,但极大概率是无符号的,i++换成++i 可以避免某些情况下的 bug
    另外信息量少也没办法复现这个问题,但肯定是你代码问题,是不是文件编码有问题?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1747 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 23:47 · PVG 07:47 · LAX 15:47 · JFK 18:47
    ♥ Do have faith in what you're doing.