Bootstrap

C++内存泄漏检测

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

结果

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;