症状
程序以 Segmentation fault (core dumped) 崩溃,因信号 11 而退出。对特定输入可能稳定复现,在并发下则可能间歇发生。
诊断
启用 core 并分析回溯:
ulimit -c unlimited
./program bad-input
gdb ./program core -ex bt -ex 'info registers' -ex quit
用 sanitizer 重新构建以捕捉首次非法访问:
gcc -g -fsanitize=address,undefined -o program main.c
修复
针对回溯所指修正指针、边界或对象生命周期,并守卫解引用、以带长度参数的安全拷贝函数替代无界版本。
验证
在 ASan 下以原始输入运行;ASan 无报错且程序以 0 退出,确认非法内存访问已被修复。