Valgrind报告仍然可以发现"错误"关于printf和puts等功能。我真的不知道该怎么做。我需要摆脱它,因为它是一个学校项目,并且根本没有错误。我该如何处理?从报告我可以看到这些函数使用malloc
,但我一直以为他们自己处理内存,对吧?
我使用的是Mac OS X,这可能是valgrind和操作系统之间的问题吗?
示例代码:错误出现在任何使用的puts或printf上
void twittear(array_t* array_tweets, hash_t* hash, queue_t* queue_input){
char* user = queue_see_first(queue_input);
char key[1] = "@";
if (!user || user[0] != key[0]) {
puts("ERROR_WRONG_COMAND");
return;
}
queue_t* queue_keys = queue_create();
char* text = join_text(queue_input, queue_keys);
if (!text) {
puts("ERROR_TWEET_TOO_LONG");
queue_destroy(queue_keys, NULL);
return;
}
int id = new_tweet(array_tweets, text);
while (!queue_is_empty(queue_keys))
hash_tweet(hash, queue_dequeue(queue_keys), id);
queue_destroy(queue_keys, NULL);
printf("OK %d\n", id);
}
ERROR:
==1954== 16,384 bytes in 1 blocks are still reachable in loss record 77 of 77
==1954== at 0x47E1: malloc (vg_replace_malloc.c:300)
==1954== by 0x183855: __smakebuf (in /usr/lib/system/libsystem_c.dylib)
==1954== by 0x198217: __swsetup (in /usr/lib/system/libsystem_c.dylib)
==1954== by 0x1B1158: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==1954== by 0x1B16AF: __xvprintf (in /usr/lib/system/libsystem_c.dylib)
==1954== by 0x188B29: vfprintf_l (in /usr/lib/system/libsystem_c.dylib)
==1954== by 0x18696F: printf (in /usr/lib/system/libsystem_c.dylib)
==1954== by 0x1000036F3: twittear (main.c:138)
==1954== by 0x100003C8D: main (main.c:309
答案 0 :(得分:1)
Valgrind在Mac OS X上有些慌乱;它没有完全抑制某些系统库。 (也就是说,它没有正确地忽略一些预期的"泄漏。)结果通常会包含一些像这样的虚假结果,以及由于{{1}等函数的优化而导致的一些缓冲区溢出}。
我的建议?避免在Mac OS X上使用valgrind,除非您非常熟悉该工具。在Linux系统上编译和测试您的应用程序以获得最佳结果。