【发布时间】:2015-02-17 05:54:24
【问题描述】:
我编写了一个类似于我在项目中面临的问题的小程序。问题是,为什么它在 HP-UX 平台上运行时会崩溃?
错误:
si_code: 1 - BUS_ADRALN - 无效的地址对齐
代码:
int main()
{
uint8_t *cmd ;
cmd = (uint8_t *) malloc(77);
uint32_t gen = 20;
*(uint32_t*)&cmd[10] = gen; /* crash here */
return 0;
}
【问题讨论】:
-
(uint32_t)&cmd[11] = gen; /* 在这里崩溃 */ --> 你可以试试“11”而不是“10”吗?
-
它以同样的方式崩溃 11。
-
@ManojHirway 12 号怎么样?
-
为了使
cmd[10]与 32 位对齐,cmd必须与 16 位对齐而不是与 32 位对齐。如果不是这种情况,AND 您的平台(即底层硬件架构 + 指定编译器)不支持未对齐的加载/存储操作,那么此操作将产生未定义的行为。如果你很幸运,那么它会立即崩溃并“让你知道”这条线有问题。如果你不走运,那么它只会将一个值存储到cmd内的不同偏移量中,并且程序会出现意外行为。
标签: c pointers casting coredump hp-ux