c - 对齐陷阱(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
解决方案
推荐阅读
- kotlin - Kotlin REPL 算术
- ios - 在 XCode 的 Copy Files Build Phase 中保留目录结构
- typescript - OpenFL bitmapData.getPixel32 总是返回 0
- django - Django中相同实体的不同一对多关系
- numpy - 关于切片 Numpy 张量的简单问题
- java - 如何强制专注于 NumberPicker (android)?
- c - C程序未填充应由条件填充的写入文件
- c# - 从 NLog 配置中获取日志文件,而不是硬编码
- excel - 如何从字符串excel公式中提取文本不起作用
- postgresql - Google Cloud SQL 存储扩展问题