admin管理员组文章数量:1537955
写好个服务程序,短期测试没啥问题,准备跑长时间的。结果,前两天正常,第三天突然涨了100多M…
这感觉,爽飞了。
这里说下Ubuntu中内存泄露检测工具:Valgrind。安装和使用连接如下:
链接: Valgrind安装使用
这里大概说下统计结果类型:
=1018910== LEAK SUMMARY:(泄漏总结)
==1018910== definitely lost (确定的内存泄露): 30,680 bytes in 10 blocks
==1018910== indirectly lost (间接的内存泄露): 208,385 bytes in 235 blocks
==1018910== possibly lost(可能的内存泄露) : 11,022 bytes in 24 blocks
==1018910== still reachable (内存指针还在使用的,未丢失但也未释放): 273,541 bytes in 3,727 blocks
==1018910== suppressed:(已被解决) 0 bytes in 0 blocks
这里直接展示下本地报的definitely 问题:
==1018910==
==1018910== 238,265 (30,120 direct, 208,145 indirect) bytes in 5 blocks are definitely lost in loss record 594 of 594
==1018910== at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==1018910== by 0x49CC68D: ??? (in /usr/lib/x86_64-linux-gnu/libcurl.so.4.6.0)
==1018910== by 0x49D8D07: curl_easy_init (in /usr/lib/x86_64-linux-gnu/libcurl.so.4.6.0)
==1018910== by 0x123EC5: libcurl_posts(char const*, curl_slist*, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) (libcurl.h:282)
==1018910== by 0x1248BA: CAPIObj::httpPost(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (APIObj.cpp:128)
==1018910== by 0x116310: CDevDriver::CoreRun() (CDevDriver.cpp:402)
==1018910== by 0x115273: CDevDriver::DriverThreadProc(void*) (CDevDriver.cpp:243)
==1018910== by 0x4875608: start_thread (pthread_create.c:477)
==1018910== by 0x4D58292: clone (clone.S:95)
定位到了 curl_easy_init,对应源代码如下:
CURL *conn = NULL;
CURLcode code;
curl_global_init(CURL_GLOBAL_DEFAULT);
conn = curl_easy_init();
if (NULL == conn)
{
std::cout << stderr << " Failed to create CURL connection" << std::endl;
exit(EXIT_FAILURE);
}
code = curl_easy_setopt(conn, CURLOPT_ERRORBUFFER, error_buffer);
if (code != CURLE_OK)
{
std::cout << stderr << " Failed to set error buffer " << code << std::endl;
return false;
}
code = curl_easy_setopt(conn,CURLOPT_FOLLOWLOCATION, 1L);
if (code != CURLE_OK)
{
std::cout << stderr << " Failed to set error buffer " << code << std::endl;
return false;
}
code = curl_easy_setopt(conn, CURLOPT_CUSTOMREQUEST, "POST");
if (code != CURLE_OK)
{
std::cout << stderr << " Failed to set error buffer " << code << std::endl;
return false;
}
这里是调用的libcurl 做的HTTP的post初始化,大家有注意到问题在哪里吗…
挺无语的问题,下面的return没有释放conn直接反回了,之前在utf8转gbk那边也是这个问题。望大家引以为戒。
具体的解析分析: valgrind测试报告分析
版权声明:本文标题:Ubuntulinux c开发(6)内存泄露 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1725886636a1047084.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论