Tag: valgrind

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 […]

如何正确(和有效)释放gtk小部件中的内存

我正在尝试了解如何在完成GTK小部件时正确释放内存,例如,如果我需要创建和销毁许多小部件。 但是,无论我尝试什么,valgrind似乎都表明内存泄漏。 我已经查看了其他问题,包括列出GTK的valgrind抑制文件的问题,但它没有改变结果。 这是重现我的问题的最简单的代码片段: #include “gtk/gtk.h” int main() { GtkWidget * widget = gtk_fixed_new(); g_object_ref(widget); g_object_ref_sink(widget); // remove floating reference, and own this object ourselves g_object_unref(widget); gtk_widget_destroy(widget); } 我的期望是(在处理浮动引用之后),unref()函数应该将引用计数减少到零,然后释放所有内存。 我把gtk_widget_destroy()放在那里以获得良好的衡量标准,但我不确定它实际上是否必要(并且它不会改变泄漏的大小)。 使用valgrind命令输出G_SLICE=debug-blocks valgrind ./t3 –supression=~/Downloads/GNOME.supp来自GTK hello_world程序中的Memory Leaks问题是 ==10079== HEAP SUMMARY: ==10079== in use at exit: 164,338 bytes in 847 blocks ==10079== total heap usage: 1,380 allocs, […]

Valgrind在简单C字符串函数上的错误

让我们考虑一下这个简单的测试程序: #include #include int main(int argc, char *argv[]) { char buf[256]; int i; strcpy(buf,”Hello world!”); i = strlen(buf); printf(“Length of string is %d.\n”,i); return 0; } 在使用英特尔c ++编译器进行编译并打开优化(O3)时,我从valgrind得到以下错误: ==8727== Conditional jump or move depends on uninitialised value(s) ==8727== at 0x4009EF: main (strtest.cpp:11) ==8727== Use of uninitialised value of size 8 ==8727== at 0x4FC61ED: _itoa_word (in […]

Valgrind不会检测缓冲区溢出

#include main() { char buf[8]; sprintf(buf,”AAAA%3s”,”XXssssssssXXXsssssXXX”); printf(“%s\n”,buf); } 我希望valgrind使用上面的代码检测缓冲区溢出。 但它不会报告任何错误或警告。 我需要为此启用任何特殊标志吗?

Valgrind错误:UME失败,错误22

我正在玩Valgrind的工具开发,我收到以下错误: valgrind: mmap(0x8048000, 4096) failed in UME with error 22 (Invalid argument). valgrind: this can be caused by executables with very large text, data or bss segments. 但我的可执行文件只有简单的变量赋值。 我无法理解如何解决这个问题。 有什么建议?

分段故障 – strcat

这是我的代码: #include #include #include void main(int arge, char *argv[]) { FILE *f1; char ch,*fn=”~/lyrics/”; strcat(fn,argv[1]); strcat(fn,”.txt”); if( (f1 = fopen(fn,”r”))==NULL ) { printf(“\nWrong filename\n%s not found”,argv[1]); return; } while((ch=getw(f1))!=EOF) { printf(“%c”,ch); } } 我使用gcc -g -o file file.c编译它,编译器没有给出任何错误消息。 但是当我运行它时,我收到错误消息: Segmentation fault (core dumped) Bad permissions for mapped region at address 0x8048659 at 0x402C36B: strcat (in […]

valgrind给出错误但无法找到位置

我已经开始在一天前使用valgrind正如SO本身的人所建议的那样。这是一个了不起的工具,但今天我遇到了一个问题。它给出了以下错误: definitely lost bytes但无法告诉错误的位置。 这是valgrind的输出: udit@udit-Dabba ~ $ valgrind –leak-check=full sendip -v -p ipv6 -f file.txt -6s ::1 -p ah -as 0x20 -aq 0x40 -ak “yugal” -am xorauth.so -p udp -us 21 – ud 21 ::2 ==12885== Memcheck, a memory error detector ==12885== Copyright (C) 2002-2010, and GNU GPL’d, by Julian Seward et al. ==12885== […]

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== […]

新的libstdc ++的gcc5.1可能会分配大堆内存

valgrind在用gcc5.1, g++ ./a.cpp编译的空程序中检测到“仍然可以到达的泄漏”, int main () {} valgrind说, valgrind ./a.out , ==32037== HEAP SUMMARY: ==32037== in use at exit: 72,704 bytes in 1 blocks ==32037== total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated ==32037== ==32037== LEAK SUMMARY: ==32037== definitely lost: 0 bytes in 0 blocks ==32037== indirectly lost: 0 bytes in 0 blocks […]

Valgrind在尝试释放malloc’ed结构时报告内存错误

当前一个malloc’ed结构被释放时,Valgrind总是唠叨存在内存错误。 结构如下所示: typedef struct bullet { int x, y; struct bullet * next; } BULLET; …我通过使用分配内存 BULLET * b; b = malloc(sizeof(BULLET)); // sizeof(BULLET) is 16 然后,通过简单地调用free(b); ,结构是free(b); 。 然而Valgrind似乎并不满足于此,所以它告诉我 ==2619== Invalid read of size 8 ==2619== at 0x40249F: ctrl_bullets (player.c:89) ==2619== by 0x405083: loop_game (game.c:305) ==2619== by 0x406CCA: main (main.c:47) ==2619== Address 0x5b8d818 is […]