gpt4 book ai didi

c - 仍然可以通过 put 和 printf 访问

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:16 24 4
gpt4 key购买 nike

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);
}

错误:

==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

最佳答案

Valgrind 在 Mac OS X 上有些问题;它对某些系统库没有完全抑制。 (也就是说,它没有正确地忽略一些“预期的”泄漏。)结果通常会包括一些像这样的虚假结果,以及一些因 memcpy() 等函数优化而导致的缓冲区溢出。

我的建议?避免在 Mac OS X 上使用 valgrind,除非您非常熟悉该工具。在 Linux 系统上编译和测试您的应用程序以获得最佳结果。

关于c - 仍然可以通过 put 和 printf 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26846494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com