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

2018-01-17 18:44:20 +08:00
 utanbo

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

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

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

什么时候才能不这么菜!

2308 次点击
所在节点    问与答
7 条回复
ysc3839
2018-01-17 18:54:51 +08:00
unsigned char* b = a + 1;
然后用 b 不就好了?
am241
2018-01-17 18:56:59 +08:00
不该用 memmove 么?
kingwl
2018-01-17 19:00:18 +08:00
贵司性能瓶颈已经在 int+上了吗。。。
utanbo
2018-01-17 19:06:21 +08:00
@am241 向前的话,有重叠也不要紧。用 memmove 更好一点吧
utanbo
2018-01-17 19:07:55 +08:00
@kingwl memcpy 在一个循环里。。。可能循环很多次
h4lbhg1G
2018-01-17 19:46:02 +08:00
这种玩意不应该是循环数组么 a[(idx+offset)%100]; 不过这里的求余代价也是比较大,而且是每次操作都会倍加,相当于一次乘法指令,总的来说相当于四五倍原来的指令。
xieyudi1990
2018-01-18 07:34:01 +08:00
@h4lbhg1G 如果是模 2^n 对齐的数,倒是可以用位操作解决。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/423718

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX