首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Valgrind检测到仍可达的泄漏

Valgrind检测到仍可达的泄漏
EN

Stack Overflow用户
提问于 2010-10-01 23:22:20
回答 5查看 128.8K关注 0票数 167

本块中提到的所有函数都是库函数。我如何纠正这个内存泄漏?

它列在“仍然可达的”类别下。(还有4个,非常相似,但大小不同)

代码语言:javascript
运行
复制
 630 bytes in 1 blocks are still reachable in loss record 5 of 5
    at 0x4004F1B: calloc (vg_replace_malloc.c:418)
    by 0x931CD2: _dl_new_object (dl-object.c:52)
    by 0x92DD36: _dl_map_object_from_fd (dl-load.c:972)
    by 0x92EFB6: _dl_map_object (dl-load.c:2251)
    by 0x939F1B: dl_open_worker (dl-open.c:255)
    by 0x935965: _dl_catch_error (dl-error.c:178)
    by 0x9399C5: _dl_open (dl-open.c:584)
    by 0xA64E31: do_dlopen (dl-libc.c:86)
    by 0x935965: _dl_catch_error (dl-error.c:178)
    by 0xA64FF4: __libc_dlopen_mode (dl-libc.c:47)
    by 0xAE6086: pthread_cancel_init (unwind-forcedunwind.c:53)
    by 0xAE61FC: _Unwind_ForcedUnwind (unwind-forcedunwind.c:126)

Valgrind Catch:一旦我运行我的程序,它没有内存泄漏,但它在Valgrind输出中有一个额外的行,这是以前没有的:

由于munmap(),

丢弃/lib/libgcc_s-4.4.4-20100630.so.1中的0x5296fa0-0x52af438处的系统

如果泄漏不能被纠正,那么至少有人可以解释为什么munmap()行导致Valgrind报告0“仍然可以到达”泄漏?

编辑:

下面是一个最小的测试样本:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *runner(void *param) {
    /* some operations ... */
    pthread_exit(NULL);
}

int n;

int main(void) {

    int i;
    pthread_t *threadIdArray;

    n=10; /* for example */

    threadIdArray = malloc((n+n-1)*sizeof(pthread_t));  

    for(i=0;i<(n+n-1);i++) {
        if( pthread_create(&threadIdArray[i],NULL,runner,NULL) != 0 ) {
            printf("Couldn't create thread %d\n",i);
            exit(1);
        }
    }


    for(i=0;i<(n+n-1);i++) {
        pthread_join(threadIdArray[i],NULL);
    }

    free(threadIdArray);

    return(0);
}

运行时使用:

代码语言:javascript
运行
复制
valgrind -v --leak-check=full --show-reachable=yes ./a.out
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3840582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档