首页 > 解决方案 > 对齐陷阱(memcpy 时)

问题描述

我确实有 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

查看指针,first 总是不是 4 的倍数,但 2nd 指针是。长度一样!我不明白。什么是问题,这条线之间有什么不同。

用 valgrind 测试它并没有给我任何线索。valgrind --leak-check=yes

标签: carm

解决方案


推荐阅读