C libcurl内存仍然可以访问

C libcurl内存仍然可以访问,curl,libcurl,Curl,Libcurl,当使用curl时,我的内存仍然不足。任何人都知道这个,知道这是怎么回事 我知道这不是一个严重的问题,只是出于好奇,我想知道这里可能出了什么问题 下面给出了重现此问题的代码 int main(int argc, char **argv) { curl_global_init(CURL_GLOBAL_ALL); curl_global_cleanup(); return 0; } 这样,整个valgrind输出文件如下所示 > ==4570== Memcheck, a

当使用curl时,我的内存仍然不足。任何人都知道这个,知道这是怎么回事

我知道这不是一个严重的问题,只是出于好奇,我想知道这里可能出了什么问题

下面给出了重现此问题的代码

int main(int argc, char **argv)
{
    curl_global_init(CURL_GLOBAL_ALL);
    curl_global_cleanup();
    return 0;
}
这样,整个valgrind输出文件如下所示

> ==4570== Memcheck, a memory error detector
> ==4570== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
> ==4570== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
> ==4570== Command: ./etransporttest
> ==4570== Parent PID: 3246
> ==4570== 
> ==4570== 
> ==4570== HEAP SUMMARY:
> ==4570==     in use at exit: 192 bytes in 12 blocks
> ==4570==   total heap usage: 1,310 allocs, 1,298 frees, 111,871 bytes allocated
> ==4570== 
> ==4570== 8 bytes in 1 blocks are still reachable in loss record 1 of 6
> ==4570==    at 0x4D92B80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==4570==    by 0x6F7C218: do_malloc (global.c:778)
> ==4570==    by 0x6F7D34C: _gcry_malloc (global.c:800)
> ==4570==    by 0x6F7D34C: _gcry_xmalloc (global.c:974)
> ==4570==    by 0x70339A4: _gcry_mpi_alloc_limb_space (mpiutil.c:123)
> ==4570==    by 0x70339D3: _gcry_mpi_alloc (mpiutil.c:85)
> ==4570==    by 0x7033AE9: _gcry_mpi_alloc_set_ui (mpiutil.c:565)
> ==4570==    by 0x7033AE9: _gcry_mpi_init (mpiutil.c:63)
> ==4570==    by 0x6F7C176: global_init.part.0 (global.c:120)
> ==4570==    by 0x6F7C8FE: global_init (global.c:85)
> ==4570==    by 0x6F7C8FE: _gcry_vcontrol (global.c:379)
> ==4570==    by 0x6F7927B: gcry_control (visibility.c:79)
> ==4570==    by 0x6D63009: libssh2_init (global.c:48)
> ==4570==    by 0x571510B: global_init (in /usr/local/multiplier/system/libs/libcurl.so.4.4.0)
> ==4570==    by 0x403895: main (main.c:167)
> ==4570== 
> ==4570== 16 bytes in 2 blocks are still reachable in loss record 2 of 6
> ==4570==    at 0x4D92B80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==4570==    by 0x6F7C218: do_malloc (global.c:778)
> ==4570==    by 0x6F7D34C: _gcry_malloc (global.c:800)
> ==4570==    by 0x6F7D34C: _gcry_xmalloc (global.c:974)
> ==4570==    by 0x70339A4: _gcry_mpi_alloc_limb_space (mpiutil.c:123)
> ==4570==    by 0x70339D3: _gcry_mpi_alloc (mpiutil.c:85)
> ==4570==    by 0x7033A7C: _gcry_mpi_alloc_set_ui (mpiutil.c:565)
> ==4570==    by 0x7033A7C: _gcry_mpi_init (mpiutil.c:63)
> ==4570==    by 0x6F7C176: global_init.part.0 (global.c:120)
> ==4570==    by 0x6F7C8FE: global_init (global.c:85)
> ==4570==    by 0x6F7C8FE: _gcry_vcontrol (global.c:379)
> ==4570==    by 0x6F7927B: gcry_control (visibility.c:79)
> ==4570==    by 0x6D63009: libssh2_init (global.c:48)
> ==4570==    by 0x571510B: global_init (in /usr/local/multiplier/system/libs/libcurl.so.4.4.0)
> ==4570==    by 0x403895: main (main.c:167)
> ==4570== 
> ==4570== 24 bytes in 1 blocks are still reachable in loss record 3 of 6
> ==4570==    at 0x4D92B80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==4570==    by 0x6F7C218: do_malloc (global.c:778)
> ==4570==    by 0x6F7D34C: _gcry_malloc (global.c:800)
> ==4570==    by 0x6F7D34C: _gcry_xmalloc (global.c:974)
> ==4570==    by 0x70339C1: _gcry_mpi_alloc (mpiutil.c:84)
> ==4570==    by 0x7033AE9: _gcry_mpi_alloc_set_ui (mpiutil.c:565)
> ==4570==    by 0x7033AE9: _gcry_mpi_init (mpiutil.c:63)
> ==4570==    by 0x6F7C176: global_init.part.0 (global.c:120)
> ==4570==    by 0x6F7C8FE: global_init (global.c:85)
> ==4570==    by 0x6F7C8FE: _gcry_vcontrol (global.c:379)
> ==4570==    by 0x6F7927B: gcry_control (visibility.c:79)
> ==4570==    by 0x6D63009: libssh2_init (global.c:48)
> ==4570==    by 0x571510B: global_init (in /usr/local/multiplier/system/libs/libcurl.so.4.4.0)
> ==4570==    by 0x403895: main (main.c:167)
> ==4570== 
> ==4570== 24 bytes in 3 blocks are still reachable in loss record 4 of 6
> ==4570==    at 0x4D92B80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==4570==    by 0x6F7C218: do_malloc (global.c:778)
> ==4570==    by 0x6F7D34C: _gcry_malloc (global.c:800)
> ==4570==    by 0x6F7D34C: _gcry_xmalloc (global.c:974)
> ==4570==    by 0x70339A4: _gcry_mpi_alloc_limb_space (mpiutil.c:123)
> ==4570==    by 0x70339D3: _gcry_mpi_alloc (mpiutil.c:85)
> ==4570==    by 0x7033A3E: _gcry_mpi_alloc_set_ui (mpiutil.c:565)
> ==4570==    by 0x7033A3E: _gcry_mpi_init (mpiutil.c:63)
> ==4570==    by 0x6F7C176: global_init.part.0 (global.c:120)
> ==4570==    by 0x6F7C8FE: global_init (global.c:85)
> ==4570==    by 0x6F7C8FE: _gcry_vcontrol (global.c:379)
> ==4570==    by 0x6F7927B: gcry_control (visibility.c:79)
> ==4570==    by 0x6D63009: libssh2_init (global.c:48)
> ==4570==    by 0x571510B: global_init (in /usr/local/multiplier/system/libs/libcurl.so.4.4.0)
> ==4570==    by 0x403895: main (main.c:167)
> ==4570== 
> ==4570== 48 bytes in 2 blocks are still reachable in loss record 5 of 6
> ==4570==    at 0x4D92B80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==4570==    by 0x6F7C218: do_malloc (global.c:778)
> ==4570==    by 0x6F7D34C: _gcry_malloc (global.c:800)
> ==4570==    by 0x6F7D34C: _gcry_xmalloc (global.c:974)
> ==4570==    by 0x70339C1: _gcry_mpi_alloc (mpiutil.c:84)
> ==4570==    by 0x7033A7C: _gcry_mpi_alloc_set_ui (mpiutil.c:565)
> ==4570==    by 0x7033A7C: _gcry_mpi_init (mpiutil.c:63)
> ==4570==    by 0x6F7C176: global_init.part.0 (global.c:120)
> ==4570==    by 0x6F7C8FE: global_init (global.c:85)
> ==4570==    by 0x6F7C8FE: _gcry_vcontrol (global.c:379)
> ==4570==    by 0x6F7927B: gcry_control (visibility.c:79)
> ==4570==    by 0x6D63009: libssh2_init (global.c:48)
> ==4570==    by 0x571510B: global_init (in /usr/local/multiplier/system/libs/libcurl.so.4.4.0)
> ==4570==    by 0x403895: main (main.c:167)
> ==4570== 
> ==4570== 72 bytes in 3 blocks are still reachable in loss record 6 of 6
> ==4570==    at 0x4D92B80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==4570==    by 0x6F7C218: do_malloc (global.c:778)
> ==4570==    by 0x6F7D34C: _gcry_malloc (global.c:800)
> ==4570==    by 0x6F7D34C: _gcry_xmalloc (global.c:974)
> ==4570==    by 0x70339C1: _gcry_mpi_alloc (mpiutil.c:84)
> ==4570==    by 0x7033A3E: _gcry_mpi_alloc_set_ui (mpiutil.c:565)
> ==4570==    by 0x7033A3E: _gcry_mpi_init (mpiutil.c:63)
> ==4570==    by 0x6F7C176: global_init.part.0 (global.c:120)
> ==4570==    by 0x6F7C8FE: global_init (global.c:85)
> ==4570==    by 0x6F7C8FE: _gcry_vcontrol (global.c:379)
> ==4570==    by 0x6F7927B: gcry_control (visibility.c:79)
> ==4570==    by 0x6D63009: libssh2_init (global.c:48)
> ==4570==    by 0x571510B: global_init (in /usr/local/multiplier/system/libs/libcurl.so.4.4.0)
> ==4570==    by 0x403895: main (main.c:167)
> ==4570== 
> ==4570== LEAK SUMMARY:
> ==4570==    definitely lost: 0 bytes in 0 blocks
> ==4570==    indirectly lost: 0 bytes in 0 blocks
> ==4570==      possibly lost: 0 bytes in 0 blocks
> ==4570==    still reachable: 192 bytes in 12 blocks
> ==4570==         suppressed: 0 bytes in 0 blocks
> ==4570== 
> ==4570== For counts of detected and suppressed errors, rerun with: -v
> ==4570== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

你记得调用curl\u global\u cleanup吗?是的,我已经调用了。没有看到代码,也没有获得关于你正在使用的libcurl的更多信息,我们无法确定。它可能是一个libcurl bug(可能已经修复),可能是libssh2 bug,也可能是代码中的错误。我已经编辑了问题,添加了代码,还添加了完整的valgrind输出文件。这里解释了“仍然可以访问”:您记得调用curl_global_cleanup吗?是的,我已经打过电话了。没有看到代码,也没有获得关于您正在使用的libcurl的更多信息,我们无法确定。这可能是一个libcurl错误(可能已经修复),可能是libssh2错误,也可能是代码中的错误。我已经编辑了问题,添加了代码,还添加了完整的valgrind输出文件。这里解释了“仍然可以访问”: