Valgrind – Impossible de comprendre la sortie d’erreur

Je suis désolé si je fais éventuellement quelque chose de mal. Ok mon problème est le suivant:

Je viens de coder quelque chose de très facile, mais lorsque vous jetez un coup d’œil à la sortie d’erreur de Valgrind, cela me laisse perplexe.

Code:

#include  #include  int main(int argc, char *argv[]) { int num1 = 100; double num2 = 1.2; printf("Number 1 one is: %d.\n Number two is: %f.\n", num1, num2); return 0; } 

Rapport d’erreur Valgrind:

 $ valgrind --leak-check=full ./yaq ==50642== Memcheck, a memory error detector ==50642== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==50642== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info ==50642== Command: ./yaq ==50642== --50642-- ./yaq: --50642-- dSYM directory has wrong UUID; consider using --dsymutil=yes ==50642== Conditional jump or move depends on uninitialised value(s) ==50642== at 0x1003FCC3F: _platform_memchr$VARIANT$Haswell (in /usr/lib/system/libsystem_platform.dylib) ==50642== by 0x1001F0B96: __sfvwrite (in /usr/lib/system/libsystem_c.dylib) ==50642== by 0x1001FAFE5: __vfprintf (in /usr/lib/system/libsystem_c.dylib) ==50642== by 0x1002209AE: __v2printf (in /usr/lib/system/libsystem_c.dylib) ==50642== by 0x100220C80: __xvprintf (in /usr/lib/system/libsystem_c.dylib) ==50642== by 0x1001F6B71: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) ==50642== by 0x1001F49D7: printf (in /usr/lib/system/libsystem_c.dylib) ==50642== by 0x100000F32: main (in ./yaq) ==50642== Number 1 one is: 100. Number two is: 1.200000. ==50642== ==50642== HEAP SUMMARY: ==50642== in use at exit: 38,673 bytes in 427 blocks ==50642== total heap usage: 510 allocs, 83 frees, 44,945 bytes. ==50642== To see them, rerun with: --leak-check=full --show-leak- kinds=all ==50642== ==50642== For counts of detected and suppressed errors, rerun with: -v ==50642== Use --track-origins=yes to see where uninitialised values come from ==50642== ERROR SUMMARY: 3 errors from 1 contexts (suppressed: 17 from 17) 

Pourquoi dit-il 3 erreurs?

Merci d’avance. Meilleures salutations

Vous pourrez peut-être les voir si vous exécutez avec --show-leak-kinds=all :

 ==96034== Memcheck, a memory error detector ==96034== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==96034== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info ==96034== Command: ./yaq ==96034== --96034-- ./yaq: --96034-- dSYM directory is missing; consider using --dsymutil=yes ==96034== Conditional jump or move depends on uninitialised value(s) ==96034== by 0x10021FCA0: __xvprintf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001F5B91: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001F39F7: printf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x100000F32: main (in ./yaq) ==96034== ==96034== 80 bytes in 1 blocks are still reachable in loss record 48 of 85 ==96034== at 0x10000859B: malloc (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so) ==96034== by 0x1001D1756: __Balloc_D2A (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001D2075: __d2b_D2A (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001CE88B: __dtoa (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001F6D72: __vfprintf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x10021F9CE: __v2printf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x10021FCA0: __xvprintf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001F5B91: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001F39F7: printf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x100000F32: main (in ./yaq) ==96034== ==96034== 4,096 bytes in 1 blocks are still reachable in loss record 85 of 85 ==96034== at 0x10000859B: malloc (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so) ==96034== by 0x1001F0856: __smakebuf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1002053A7: __swsetup (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x10021F77D: __v2printf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x10021FCA0: __xvprintf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001F5B91: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x1001F39F7: printf (in /usr/lib/system/libsystem_c.dylib) ==96034== by 0x100000F32: main (in ./yaq) ==96034== ==96034== LEAK SUMMARY: ==96034== definitely lost: 0 bytes in 0 blocks ==96034== indirectly lost: 0 bytes in 0 blocks ==96034== possibly lost: 0 bytes in 0 blocks ==96034== still reachable: 4,244 bytes in 4 blocks ==96034== suppressed: 34,783 bytes in 425 blocks ==96034== ==96034== For counts of detected and suppressed errors, rerun with: -v ==96034== Use --track-origins=yes to see where uninitialised values come from ==96034== ERROR SUMMARY: 3 errors from 1 contexts (suppressed: 18 from 18) 

Ce sont des problèmes dans les bibliothèques système OS X. Je les ai supprimés en générant ce fichier de suppression avec valgrind --leak-check=yes --show-leak-kinds=all --gen-suppressions=yes ./yaq . La sortie est un peu plus propre alors:

 $ valgrind --leak-check=yes --show-leak-kinds=all --suppressions=yaq.supp ./yaq [7:47:49] ==96285== Memcheck, a memory error detector ==96285== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==96285== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info ==96285== Command: ./yaq ==96285== --96285-- ./yaq: --96285-- dSYM directory is missing; consider using --dsymutil=yes Number 1 one is: 100. Number two is: 1.200000. ==96285== ==96285== HEAP SUMMARY: ==96285== in use at exit: 39,027 bytes in 429 blocks ==96285== total heap usage: 510 allocs, 81 frees, 45,171 bytes allocated ==96285== ==96285== LEAK SUMMARY: ==96285== definitely lost: 0 bytes in 0 blocks ==96285== indirectly lost: 0 bytes in 0 blocks ==96285== possibly lost: 0 bytes in 0 blocks ==96285== still reachable: 0 bytes in 0 blocks ==96285== suppressed: 39,027 bytes in 429 blocks ==96285== ==96285== For counts of detected and suppressed errors, rerun with: -v ==96285== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 21 from 19) 

Le support Valgrind sur OS X est en cours de développement. Votre meilleure approche consiste à vous assurer que vous utilisez une version de liaison SVN et effectuez des mises à jour fréquemment.

Les erreurs que Valgrind vous rapporte sont présentes dans les bibliothèques du système OS X. Ce n’est pas la faute de votre programme, mais parce que même des programmes simples comprenant ces bibliothèques système, Valgrind continue de les récupérer. Les suppressions dans le tronc de Valgrind sont mises à jour en permanence pour résoudre ces problèmes, ce qui vous permet de vous concentrer sur les problèmes réels pouvant être présents dans votre code.

Les commandes suivantes vous permettront d’utiliser le trunk Valgrind, si ce n’est déjà fait:

 svn co svn://svn.valgrind.org/valgrind/trunk valgrind cd valgrind ./autogen.sh ./configure make -j4 sudo make install