本文介绍了内存没有释放,但仍可达,出现泄漏。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
通过与Valgrind的检查,我看到的内存块5终止我的程序后不会释放,但他们仍然到达。我是否需要被它困扰?
和它是如何发生的?
站务@凝胶剂:〜/ $沙盘的valgrind ./a.out
== == 2430 MEMCHECK,内存错误检测
== == 2430版权所有(C)2002-2010,和GNU GPL的,Julian Seward写等。
== == 2430 Valgrind的使用,3.6.1和LibVEX;与-h版权信息重新运行
== == 2430命令:./a.out
== == 2430
你好,世界!
线程1返回1
线程2返回10
Thread3返回10
== == 2430
== == 2430 HEAP摘要:
== == 2430使用在出口处:在5块1,590个字节
== == 2430总堆的使用情况:14 allocs,9的FreeS,2,442字节分配
== == 2430
== == 2430泄漏摘要:
== == 2430肯定丢失:0字节0块
== == 2430失去了间接:0字节0块
== == 2430可能丢失:0字节0块
== == 2430到达尚:在5块1,590个字节
== == 2430燮pressed:0字节0块
== == 2430与重新运行--leak检查=全看到内存泄露的细节
== == 2430
== == 2430对于检测燮pressed错误计数,重新运行:-v
== == 2430错误摘要:从0 0上下文错误(SUP pressed:4 4)
下面是我的code,我能做些什么,以释放那些5块,如果我打算?
的#include< pthreads.h中>
#包括LT&;&stdio.h中GT;
#包括LT&;&stdlib.h中GT;pthread_mutex_t互斥锁= PTHREAD_MUTEX_INITIALIZER;无效* MyFunction的(无效* PTR)
{
静态INT n_call = 0;
为int * RETVAL =的malloc(sizeof的(INT)); 调用pthread_mutex_lock(安培;互斥锁);
n_call ++;
* RETVAL = n_call;
调用pthread_mutex_unlock(安培;互斥锁); 如果(n_call 2)
{
字符*味精;
味精=(字符*)PTR;
的printf(%S \\ n,味精); 返回RETVAL;
}
其他
{
* RETVAL = 10;
了pthread_exit(RETVAL);
}
}INT主(INT ARGC,CHAR *的argv [])
{
的pthread_t T1,T2,T3; 字符*味精=世界,你好!
在pthread_create(安培; T1,NULL,MyFunction的(无效*)味精);
在pthread_create(安培; T2,NULL,MyFunction的(无效*)味精);
在pthread_create(安培; T3,NULL,MyFunction的(无效*)味精); INT ** S1 =的malloc(sizeof的为(int *));
INT ** S2 =的malloc(sizeof的为(int *));
INT ** S3 =的malloc(sizeof的为(int *)); 在pthread_join(T1,(空隙**)S1);
在pthread_join(T2,(空隙**)S2);
在pthread_join(T3,(空隙**)S3); 的printf(线程1返回%d个\\ N,** S1);
的printf(线程2返回%d个\\ N,** S2);
的printf(Thread3返回%d个\\ N,** S3); 免费(* S1);
免费(* S2);
免费(* S3); 免费(S1);
免费(S2);
免费(S3); 返回0;
}
解决方案
没有它不是一个内存泄漏。结果
这意味着你的计划仍具有参考内存稍后获释。
区分如下:
这篇关于内存没有释放,但仍可达,出现泄漏。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!