V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
utanbo
V2EX  ›  问与答

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

  •  
  •   utanbo · 2018-01-17 18:44:20 +08:00 · 2364 次点击
    这是一个创建于 2489 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    什么时候才能不这么菜!

    7 条回复    2018-01-18 07:34:01 +08:00
    ysc3839
        1
    ysc3839  
       2018-01-17 18:54:51 +08:00
    unsigned char* b = a + 1;
    然后用 b 不就好了?
    am241
        2
    am241  
       2018-01-17 18:56:59 +08:00 via Android
    不该用 memmove 么?
    kingwl
        3
    kingwl  
       2018-01-17 19:00:18 +08:00 via Android
    贵司性能瓶颈已经在 int+上了吗。。。
    utanbo
        4
    utanbo  
    OP
       2018-01-17 19:06:21 +08:00
    @am241 向前的话,有重叠也不要紧。用 memmove 更好一点吧
    utanbo
        5
    utanbo  
    OP
       2018-01-17 19:07:55 +08:00
    @kingwl memcpy 在一个循环里。。。可能循环很多次
    h4lbhg1G
        6
    h4lbhg1G  
       2018-01-17 19:46:02 +08:00
    这种玩意不应该是循环数组么 a[(idx+offset)%100]; 不过这里的求余代价也是比较大,而且是每次操作都会倍加,相当于一次乘法指令,总的来说相当于四五倍原来的指令。
    xieyudi1990
        7
    xieyudi1990  
       2018-01-18 07:34:01 +08:00 via Android
    @h4lbhg1G 如果是模 2^n 对齐的数,倒是可以用位操作解决。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2856 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 14:48 · PVG 22:48 · LAX 06:48 · JFK 09:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.