[英]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.