淘宝商城(天猫)高级技术专家.3年研发+3年性能测试调优/系统测试+4年团队管理与测试架构、研发系统实践. 新舞台新气象, 深化测试基础架构及研发架构,希望能在某个技术领域成为真正的技术大牛。欢迎荐才http://bbs.51testing.com/viewthread.php?tid=120496&extra=&page=1 .邮件: jianzhao.liangjz@alibaba-inc.com,MSN:liangjianzhao@163.com.微博:http://t.sina.com.cn/1674816524

linux 多线程误用memory leak 检测

上一篇 / 下一篇  2009-11-17 00:24:36 / 个人分类:linux管理与调整

      linux多线程代码memory leak ,采用cpplintcppcheck均无法静态分析到. 样例程序:

[liangjz@b2b_plat_1367 ~]$ cat mythread.cpp

#include <pthread.h>

#include <stdio.h>

#include <unistd.h>

void *testthread(void * arg)

{

       printf("I am working.\n");

       char *szP=NULL;

       szP=new char[1024*1024*100];

       delete []szP;

       printf("I am stopping.\n");

        //pthread_detach(pthread_self());

        //or

//pthread_exit(0);

}

 

int main(int argc,char *argv[])

{

       int i=0;

       pthread_t pid;

       char *szP=NULL;

       while(i<1000){

               i++;

               pthread_create(&pid,NULL,testthread,&i);

               printf("ok%d,pid=%d\n",i,pid);

               sleep(5);

       }

}

编译及链接

[liangjz@b2b_plat_1367 ~]$ g++  -g -o mythread mythread.cpp -lpthread

 

运行

[liangjz@b2b_plat_1367 ~]$./mythread

 

terminate called after throwing an instance of 'std::bad_alloc'

 what(): St9bad_alloc

 

运行最后结果是分配内存失败. 在执行过程vmstat输出也看到有si/so频繁发生, 确实是有内存泄露发生.

 

Root cause分析见http://hong106525654.blog.163.com/blog/static/60218882006102222658633/.

 

规避便是将 pthread_detach(pthread_self()); 注释去掉.

 

如朋友知道哪款工具可以静态分析到如上的错误,呵呵,请不吝指教J


TAG: Linux 检测 linux 线程 memory leak

sihanjishu的个人空间 引用 删除 sihanjishu   /   2009-11-25 20:58:13
大师最近真是多产。
 

评分:0

我来说两句

Open Toolbar