Tag: 内存泄漏

valgrind在使用libcurl时检测到内存泄漏(没有ssl)

在我的C程序中,我使用了libcurl的一些基本function。 今天我跑了valgrind,以检查我是否有内存泄漏,valgrind疯狂报告多个错误。 我跟踪它基本上是: CURL *curl; CURLcode res; curl = curl_easy_init(); // … curl_easy_cleanup(curl); 如果我完全删除使用libcurl的代码,valgrind不会报告任何错误。 我已经读过使用带有libcurl和ssl的valgrind有一些问题,但我不提取任何httpsurl等。 我能做什么? 我可以让valgrind关闭libcurl错误(可能出现误报吗?)并仅报告我的代码中的错误? 尽管libcurl使用最简单,但由于存在大量错误,因此valgrind的输出非常混乱。 不幸的是我没有安装libcurl构建的调试,所以valgrind甚至不会报告它检测到泄漏的行号/文件。 错误消息如下所示: ==27330== ==27330== HEAP SUMMARY: ==27330== in use at exit: 34,960 bytes in 2,406 blocks ==27330== total heap usage: 20,130 allocs, 17,724 frees, 2,511,576 bytes allocated ==27330== ==27330== 40 (20 direct, 20 indirect) bytes in 1 […]

使用_crtBreakAlloc查找内存泄漏 – 标识符“_crtBreakAlloc”未识别

我试图在Watch窗口中使用_crtBreakAlloc , 如此链接中所建议的那样,但是值行显示“identifier”_crtBreakAlloc“未识别”并且它根本不起作用。 我究竟做错了什么? 我顺便使用Visual Studio。 代码示例: #define _CRTDBG_MAP_ALLOC #include #include #include int main() { int *arr = (int*)malloc(10 * sizeof(int)); //breakpoint here free(arr); return 0; } 然后我将_crtBreakAlloc写入Watch窗口的Name字段,并在遇到断点时按Enter键。

dlopen / dlsym / dlclose(dlfcn.h)导致内存泄漏

当像这样使用dlfcn系列时: #include #include typedef int(*timefunc_t)(void*); int main() { timefunc_t fun; void* handle; handle = dlopen(“libc.so.6”, RTLD_LAZY); fun = (timefunc_t)dlsym(handle, “time”); printf(“time=%d\n”, fun(NULL)); dlclose(handle); return 0; } 它会导致内存泄漏: ==28803== Memcheck, a memory error detector ==28803== Copyright (C) 2002-2010, and GNU GPL’d, by Julian Seward et al. ==28803== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright […]

getpwnam_r内存泄漏

我使用getpwnam_r来处理程序中的客户端连接。 可悲的是,它似乎分配了一个永远不会释放的缓冲区。 相关的valgrind输出: ==15774== 536 (104 direct, 432 indirect) bytes in 2 blocks are definitely lost in loss record 1 of 3 ==15774== at 0x4C24CFE: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so) ==15774== by 0x5143B5A: nss_parse_service_list (in /lib64/libc-2.10.1.so) ==15774== by 0x51442E6: __nss_database_lookup (in /lib64/libc-2.10.1.so) ==15774== by 0x57BE35F: ??? ==15774== by 0x57BF3F6: ??? ==15774== by 0x51014D2: getpwnam_r@@GLIBC_2.2.5 (in /lib64/libc-2.10.1.so) ==15774== […]

malloc上释放对象的校验和不正确

我得到了 malloc: *** error for object 0x1001012f8: incorrect checksum for freed object – object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug 以下函数中的错误: char* substr(const char* source, const char* start, const char* end) { char *path_start, *path_end, *path; int path_len, needle_len = strlen(start); path_start = strcasestr(source, start); if (path_start […]

为什么mstats和malloc_zone_statistics在免费后没有显示恢复的内存?

我正在尝试编写一些unit testing来检查内存是否已被释放 – 以检查内存泄漏 – 在OS X(10.9 Mavericks)上。 我正在尝试使用mstats()和malloc_zone_statistics()来发现我需要的信息。 但似乎他们没有显示内存被释放(参见下面的示例输出…在调用free()后内存使用率不会改变) 我怀疑这与堆管理有关,而不是与这些函数的问题有关。 我认为堆不释放释放的内存,也许它可以重用它而不需要删除和添加块的开销。 有没有办法告诉堆释放释放的块? 要更积极还是关闭优化? 我只是错误地使用mstats()或malloc_zone_statistics()吗? 更新:找到的解决方案……在底部提供…… 这是我的测试程序的输出: === Initial conditions === in use: 23584, allocated: 9437184, blocks: 320 SimpleLeaker(19583,0x7fff7b2a2310) malloc: total: 9437184, used: 23584, free: 9413600 === Before allocation === in use: 23584, allocated: 9437184, blocks: 320 SimpleLeaker(19583,0x7fff7b2a2310) malloc: total: 9437184, used: 23584, free: 9413600 […]

需要一个工具来检测C代码中的内存泄漏

是否有一个很好的应用程序(有某种gui)来测试c代码中的内存泄漏。 我真的想测试我的作业/程序,但对此非常新,我很难使用终端来做事情,特别是使用gdb进行调试(对我而言,感觉就像过去的爆炸,我可以使用一些可视调试器)。 谢谢您的帮助 编辑:平台没关系 – 我正在运行一切;)

cygwin上的内存泄漏工具

是否有任何替代方法可用于检查Cygwin上的内存泄漏,因为它不支持Valgrind?

内存泄漏使用JSON-C

我是JSON-C的新手,请查看我的示例代码,让我知道它会创建任何内存泄漏,如果是,那么如何释放JSON-C对象。 struct json_object *new_obj = NULL; new_obj = json_tokener_parse(strRawJSON); new_obj = json_object_object_get(new_obj, “FUU”); if(NULL == new_obj){ SYS_OUT(“\nFUU not found in JSON”); return NO; } new_obj = json_object_object_get(new_obj, “FOO”); // I m re-using new_obj, without free it? if(NULL == new_obj){ SYS_OUT(“\nFOO not found in JSON”); return NO; } // DO I need to clean new_obj, if […]

Valgrind在Mac OSX 10.8上显示空程序的内存泄漏

Valgrind使用brew安装。 #include #include int main() { return 0; } gcc -g -o hello hello.c valgrind –tool=memcheck –leak-check=yes ./hello