8字节内存对齐引发的bug

记录一个偶发的死机情况

1. 问题背景

最近的项目中,改动代码时新增了一个结构体,该结构体包含 double 成员,并通过 double 指针进行了取值操作。

2. 代码复现

大致代码如下:

c 复制代码
/* packed(1)结构体:double成员仅按1字节对齐,value偏移为1,必然不是8字节对齐 */
#pragma pack(1)             // 设置对齐值为 1 字节
typedef struct {
    uint8_t  prefix;   /* 偏移0 */
    double   value;    /* 偏移1,未8字节对齐 */
} unaligned_double_struct_t;
#pragma pack()              // 恢复默认对齐


void Trigger_Unaligned_Double_Fault(double *p)
{
    volatile double val;
    

    
    /* 对double指针进行取值操作,若地址未8字节对齐则触发异常 */
    val = *p;
    
    /* 防止编译器优化 */
    (void)val;
}

执行后触发了异常,关键在于该操作并非每次都会执行,因此并非每次必现。

手动模拟异常操作的结果:

相关推荐
Soari2 天前
【紧急发布】Claude Code v2.1.148 :修复 Bash 127 瘫痪 Bug,/simplify 升级为 AI 代码评审
人工智能·bug·bash·claudecode
ABILI .3 天前
FineReport网络报表bug
bug·finereport·帆软
小陶来咯3 天前
机器人坐下后拍触摸板站起行动指令无效 — Bug 分析
机器人·bug
萤萤七悬3 天前
【AI精彩BUG汇总】一、yolo图像训练截图蓝色变橙色
人工智能·yolo·bug
小雨青年3 天前
Git Bisect 实战:用二分法快速找到引入 Bug 的提交
git·bug
淘矿人4 天前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
哥本哈士奇4 天前
LangChain Deepagent 版本0.6.1中间件一个bug
中间件·langchain·bug
java修仙传4 天前
Java 实习日记:断面状态筛选 Bug 修复与对比案例日期过滤优化
java·bug·实习
CeshirenTester4 天前
当其他人回复您的帖子时是否接收实时通知? “线上Bug排查3小时,CTO当场发火”:一套让测试人“硬气”起来的质量保障体系
bug