在C ++程序中使用libcurl时内存泄漏

时间:2017-09-24 18:25:28

标签: c++ memory-leaks valgrind libcurl

我在我的C ++程序中使用libcurl来从链接中获取数据。该程序正在获得结果,但每当我做valgrind时,我都会看到一个巨大的内存泄漏。

这是我的代码:

#include <string>
#include <iostream>
#include <curl/curl.h>
#include <map>


using namespace std;

int main(){
    string url_;
    string paramname_;
    string paramvalue_;

    cout << "Enter domain name(without parameters): ";
    cin >> url_;
    cout << "Enter parameter name: ";
    cin >> paramname_;
    cout << "Enter parameter value: ";
    cin >> paramvalue_;

    CURL* c;
    curl_global_init(CURL_GLOBAL_DEFAULT);
    c = curl_easy_init();

    string finalurl_ = url_ + "?" + paramname_ + "=" +  paramvalue_;
    cout << finalurl_ << endl;

    curl_easy_setopt(c, CURLOPT_URL, finalurl_.c_str());
    cout << curl_easy_perform(c);
    curl_easy_cleanup(c);
    curl_global_cleanup();
    //free(c);

    return 0;
}

这是我在运行valgrind时得到的:

==2379== LEAK SUMMARY:
==2379==    definitely lost: 7,648 bytes in 116 blocks
==2379==    indirectly lost: 1,240 bytes in 27 blocks
==2379==      possibly lost: 2,152 bytes in 51 blocks
==2379==    still reachable: 103,874 bytes in 192 blocks
==2379==         suppressed: 612,674 bytes in 228 blocks
==2379==
==2379== For counts of detected and suppressed errors, rerun with: -v
==2379== ERROR SUMMARY: 130 errors from 130 contexts (suppressed: 19 from 15)
[1]    2379 segmentation fault  valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all  ./test

运行valgrind时绝对丢失的地方之一是:

==2379== 224 (64 direct, 160 indirect) bytes in 1 blocks are definitely lost in loss record 341 of 381
==2379==    at 0x10009C232: calloc (vg_replace_malloc.c:714)
==2379==    by 0x100E54BA0: realizeClass(objc_class*) (in /usr/lib/libobjc.A.dylib)
==2379==    by 0x100E54C4D: realizeClass(objc_class*) (in /usr/lib/libobjc.A.dylib)
==2379==    by 0x100E54C4D: realizeClass(objc_class*) (in /usr/lib/libobjc.A.dylib)
==2379==    by 0x100E5A72D: getClass_impl(char const*) (in /usr/lib/libobjc.A.dylib)
==2379==    by 0x100E5AAF2: object_setClass (in /usr/lib/libobjc.A.dylib)
==2379==    by 0x10067B8BD: __CFInitialize (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==2379==    by 0x10001D846: ImageLoaderMachO::doImageInit(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==2379==    by 0x10001DC12: ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) (in /usr/lib/dyld)
==2379==    by 0x1000194A9: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==2379==    by 0x100019440: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)
==2379==    by 0x100019440: ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, char const*, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) (in /usr/lib/dyld)

我正在使用g ++编译程序:

g++ -std=c++11 -g -o test -lcurl test.cpp

我正在寻找释放记忆的方法。任何帮助将不胜感激。

0 个答案:

没有答案
相关问题