我确实使用memcpy(取决于参数)警告/错误:对齐陷阱
我这样理解,指针未对齐。但是在我的特殊情况下,奇怪的是u8 *。 而且,有时会有此消息,有时则没有。看来memcp本身工作正常(因此结果似乎还可以)。 没事的时候我看不到巧合,什么时候没?!?
u32 pictureCopy(u8 *to, u32 *from)
{
u32 expected_size;
u8 *source;
u8 *target;
u32 *counter;
u32 *size;
....
counter = from-2;
size = from-1;
source = (u8 *)from;
target = to;
for (int i=0; i<expected_size/2 ; i+= saved_image_setting2.width) {
printf("\n# i, target, source, size %i, %p, %p, %i\n", i, &target[i], &source[i], saved_image_setting2.width);
sleep(1);
memcpy(&target[i], &source[i], saved_image_setting2.width);
sleep(1);
printf("\nend %i\n", i);
}
输出是这样的:
# i, target, source, size 0, 0xb500800a, 0xb5cf2008, 84
Alignment trap: sps (1493) PC=0xb6e1ced4 Instr=0x14913004 Address=0xb5cf2056 FSR 0x011
end 0
#i, target, source, size 84, 0xb500805e, 0xb5cf205c, 84
end 84
## i, target, source, size 168, 0xb50080b2, 0xb5cf20b0, 84
Alignment trap: sps (1493) PC=0xb6e1ced4 Instr=0x14913004 Address=0xb5cf20fe FSR 0x011
end 168
## i, target, source, size 252, 0xb5008106, 0xb5cf2104, 84
end 252
看指针,第一个指针始终不是4的倍数,而第二个指针总是。长度是一样的!我不明白这是什么问题,这两行之间有什么区别。
使用valgrind进行测试无法提供任何线索。 valgrind --leak-check =是