繁体   English   中英

C memcpy中的分割错误

[英]segmentation fault in C memcpy

我在使用memcpy时遇到一个基本问题,不知道问题出在哪里。 我在下面显示代码的相关部分。 代码段。 在循环的最后一次右迭​​代中出现故障。 为什么不能索引到保留的存储区?

先感谢您。

mystr->data = malloc(2048);

unsigned char buf[8500];
for (i=0;i<32;i++){
    offset = i*256;
    memcpy(&mystr->data[64*i],&buf[8+offset],64);
}

从评论中可以明显看出我的猜想是对的:

如果sizeof( *mystr->data ) > 1 (例如,因为它是unsigned long long *data; ),那么您将超出缓冲区的末尾,因为&mystr->data[64*i]这样的表达式所计算的偏移量是相对于类型,这里是mystr->data + 64*i*sizeof(*mystr->data) bytes ,在您的代码中最大为64 * 31 * 8。

您可以根据需要更改类型,也可以更改偏移量(在您的情况下为&mystr->data[8*i] ),具体取决于上下文中语义上“正确”的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM