1、简介
AddressSanitizer(又名 ASan)是 C/C++ 的内存错误检测器。它可以用来检测:
释放后使用(悬空指针)
堆缓冲区溢出
堆栈缓冲区溢出
全局缓冲区溢出
在作用域之后使用
初始化顺序错误
内存泄漏
这个工具非常快,只将被检测的程序速度减慢约2倍,而Valgrind将会是程序减慢10倍。
官网:https://github.com/google/sanitizers
AddressSanitizer包括一个编译器instrumentation模块和一个提供malloc()/free()替代项的运行时库。
从gcc 4.8开始,AddressSanitizer成为gcc的一部分。当然,要获得更好的体验,最好使用4.9及以上版本,因为gcc 4.8的AddressSanitizer还不完善,最大的缺点是没有符号信息。
2、使用
2.1 测试源码
测试源码:
#include <iostream>
#in