我有一个使用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);
}
答案 0 :(得分:2)
从评论中可以清楚地看出我的怀疑是正确的:
如果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]
),具体取决于看似正确的内容&#39;在您的上下文中语义上