不调用curl_multi_cleanup()是否安全?

问题描述 投票:0回答:1

我正在阅读:https://stackoverflow.com/a/26648931/6872717,并决定修复该代码并对其进行改进以使其能够用作库。

这是libcurl网页中的示例之一:https://curl.haxx.se/libcurl/c/fopen.html

[我发现,尽管libcurl文档指出这是指向函数curl_multi_init()

此初始化调用必须具有对curl_multi_cleanup的相应调用操作完成后。

示例代码永远不会调用它。

在程序中,可以很容易地在主程序的末尾添加该调用,但是对于库而言,要知道是否可以清理多句柄就更加困难(或可能是不可能的)。忽略通话是否有效?

我想这构成了内存泄漏,但不是很大,只有一次,而且我不知道如何避免。


编写curl_multi_init() __attribute__((destructor))函数是否可以,以便如果用户忘记调用它,无论如何都会调用它,或者那时候资源已经被破坏并产生UB?

c memory-leaks libcurl
1个回答
1
投票

如果您从不清理它,则将永远不会获得与该句柄相关的分配的内存和资源。”>

在fopen.c示例中,多句柄是全局的,并且已被重用,并且实际上从未被释放。如果您永不收回内存就可以了。

程序退出时,无论如何都将强制释放所有内存和资源。

© www.soinside.com 2019 - 2024. All rights reserved.