通常C /C++ 编译器 是对内存访问是不添加边界检查的。有时候优于代码错误,就有读或者写 操作了缓冲区外面的内存地址。这种错误一般都很难察觉。所以一旦编译出现AddressSanitizer: stack-buffer-overflow on address 错误,首先就检查自己代码的边界条件是否没有控制住。
什么是stack-buffer-overflow ?
举例来说:
int a[10];
a[11] = 10; // stack-buffer-overflow
a[-1] = 10;//stack-buffer-underflow
什么是head-buffer-overflow ?
举例来说:
int* x = malloc(10);
int n=x[11]; //heap-buffer-overflow
int n=x[-1] //heap-buffer-underflow