- 地址消毒 编译选项 -fsanitize=address
// prog.c
#include "stdlib.h"
#define ARRAY_SIZE
int main()
{
int* ptr = (int *)malloc(sizeof(int)*ARRAY_SIZE);
for (int i = 0; i <= ARRAY_SIZE; i++) {
ptr[i] == i;
}
return 0;
}
使用如下命令在x86 Linux 环境下编译后执行,会有内存越界运行时报错,并且程序abort,是因为访问堆内存越界了,使用地址消毒编译选项可以增加帮助coder提升代码的健壮性.地址消毒的特性来源google 的开源项目https://github.com/google/sanitizers ,不仅仅需要gcc version >= 4.8 以上或者clang version >=3.1 ,而且必须是比较流行的架构,至少2020年4月之前好像不支持risc-v 架构的
gcc -fsanitize=address prog.c -o prog
./prog