utanbo
V2EX  ›  问与答

对不起同事,对不起领导,刚写了一个大 bug。。。

  •  
  •   utanbo · Jan 17, 2018 · 2816 views
    This topic created in 3066 days ago, the information mentioned may be changed or developed.

    unsigned char* a = new unsigned char[100]; ... memcpy(a,a+1,99);//原来的,嫌效率低,就给改成下面的。。

    a+=1;//用这句替换上面 memcpy,结果再操作 a 的时候,写入 100 个字节,就越界了。。。

    真是太丢人了。对不起程序员这个职业,全靠脸皮厚。。。

    什么时候才能不这么菜!

    7 replies    2018-01-18 07:34:01 +08:00
    ysc3839
        1
    ysc3839  
       Jan 17, 2018
    unsigned char* b = a + 1;
    然后用 b 不就好了?
    am241
        2
    am241  
       Jan 17, 2018 via Android
    不该用 memmove 么?
    kingwl
        3
    kingwl  
       Jan 17, 2018 via Android
    贵司性能瓶颈已经在 int+上了吗。。。
    utanbo
        4
    utanbo  
    OP
       Jan 17, 2018
    @am241 向前的话,有重叠也不要紧。用 memmove 更好一点吧
    utanbo
        5
    utanbo  
    OP
       Jan 17, 2018
    @kingwl memcpy 在一个循环里。。。可能循环很多次
    h4lbhg1G
        6
    h4lbhg1G  
       Jan 17, 2018
    这种玩意不应该是循环数组么 a[(idx+offset)%100]; 不过这里的求余代价也是比较大,而且是每次操作都会倍加,相当于一次乘法指令,总的来说相当于四五倍原来的指令。
    xieyudi1990
        7
    xieyudi1990  
       Jan 18, 2018 via Android
    @h4lbhg1G 如果是模 2^n 对齐的数,倒是可以用位操作解决。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   912 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:13 · PVG 04:13 · LAX 13:13 · JFK 16:13
    ♥ Do have faith in what you're doing.