本文介绍了内存没有释放,但仍可达,出现泄漏。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过与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;
}


解决方案

没有它不是一个内存泄漏。结果
这意味着你的计划仍具有参考内存稍后获释。

不同的消息之间

区分如下:

这篇关于内存没有释放,但仍可达,出现泄漏。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-27 08:05
查看更多