C OpenSSL EVP泄漏字节

C OpenSSL EVP泄漏字节,c,memory-leaks,openssl,valgrind,evp-cipher,C,Memory Leaks,Openssl,Valgrind,Evp Cipher,我正在使用,无法消除所有仍然可以访问的内存。上面链接的教程泄漏了这么多: ==30413== LEAK SUMMARY: ==30413== definitely lost: 0 bytes in 0 blocks ==30413== indirectly lost: 0 bytes in 0 blocks ==30413== possibly lost: 0 bytes in 0 blocks ==30413== still reachable: 2,200 byt

我正在使用,无法消除所有仍然可以访问的内存。上面链接的教程泄漏了这么多:

==30413== LEAK SUMMARY:
==30413==    definitely lost: 0 bytes in 0 blocks
==30413==    indirectly lost: 0 bytes in 0 blocks
==30413==      possibly lost: 0 bytes in 0 blocks
==30413==    still reachable: 2,200 bytes in 27 blocks
==30413==         suppressed: 0 bytes in 0 blocks
再加上答案,我就可以把它归结为:

==30437== LEAK SUMMARY:
==30437==    definitely lost: 0 bytes in 0 blocks
==30437==    indirectly lost: 0 bytes in 0 blocks
==30437==      possibly lost: 0 bytes in 0 blocks
==30437==    still reachable: 744 bytes in 13 blocks
==30437==         suppressed: 0 bytes in 0 blocks
有可能消除这些吗?这是我甚至应该为之烦恼的事吗?


我在上看到了相互矛盾的答案,说“仍然可以访问”的内存是内存泄漏,其他人说不是,因此我感到困惑。

将函数放入一个大的for循环,检查泄漏的内存大小是否在增加,怎么样?如果不是,那么您几乎可以肯定,这与OpenSSL初始化有关。如果是这样,那就不是问题了。另外,不要使用不推荐的
ERR\u remove\u state
,而是使用
ERR\u remove\u thread\u state
。我如何在程序中设置一个不影响EVP的for循环?整个程序仅为EVP例行程序。将
ERR\u remove\u state
更改为
ERR\u remove\u thread\u state
不会对仍然可以访问的字节产生任何影响。在整个程序中添加了for循环,堆使用率如预期增加,但可访问字节保持不变。@LeśnyRumcajs忘记在最后一条注释中包含您的名字。有什么建议吗?用这些建议怎么样@LeśnyRumcajs刚刚尝试了所有这些,但它们没有任何区别(反正我已经在使用大多数)。仍然停留在
仍然可以访问:13个块中有744个字节