一次memcpy引起的bug

发布于:2021-09-23 16:23:10

有一个缓冲结构,其结构类似于如下的样子


struct buffer


{


int buf_len;


int size;


void *buf;


}




在对buffer处理的过程中,现需要将buf中后半段的数据移动到buf的前半段中,即执行了如下操作:


memcpy(buffer->buf, ?buffer->buf + (buffer->buf_len >> 1), ?buffer->buf_len >> 1);


在程序的执行过程中发现有数据错误,buf中数据为零,经定位是memcpy的问题,如上的操作可能会导致buf中的数据被填充零。


在linux下用man memcpy发现memcpy的参数源地址和目的地址之间不能有重叠,否则就应该使用memmove,memmove使用了中间临时数组以保证在重叠情况下的正确性。

相关推荐

最新更新

猜你喜欢