g++版本要求:4.9.2
利用 Asan,一个使用c++程序的动态内存检测器。
通过增加编译参数 -fsanitize=address 选项。
为了可以追溯掉调用链,增加编译参数 -fno-omit-frame-pointer 选项。
下面举例说明。
文件名 main.cpp
#include <iostream>
using namespace std;
int main()
{
char c[4]="abd";
string s1 =c;
c[3]='a';
string s2=c;
cout<<s1<<endl;
cout<<s2<<endl;
}
其中,c[3]赋值后会到导致,使用c初始化s2时内存访问越界。
编译命令 :g++ -o main main.cpp
运行 ./main
结果