В вашем случае нет утечки памяти, в основном потому, что open - это системный вызов.Если бы были утечки, valgrind все равно указывал бы на них.
Тем не менее, открытие файлов может выделять память в низкоуровневых библиотеках (скажем, вы вызываете fopen вместо open), главным образом для хранения дескриптора'на самих файлах.
В конце концов, на обычных ОС ядро может закрыть файлы, которые вы, возможно, открыли, и вернуть память, которую вы, возможно, забыли освободить при выходе, так что можно было быИнтересно, кого это волнует?Обычно считается плохой практикой не убирать вещи перед уходом, даже если в конце концов это не очень опасно.
Вы можете отслеживать оставленные нераскрытыми файлы, используя:
valgrind --track-fds=yes ./a.out
В вашем случаеЯ получаю:
==30758== Memcheck, a memory error detector
==30758== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==30758== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==30758== Command: ./a.out
==30758==
==30758==
==30758== FILE DESCRIPTORS: 7 open at exit.
==30758== Open file descriptor 1:
==30758== at 0x4F26637: dup (in /usr/lib64/libc-2.27.so)
==30758== by 0x4006A9: main (in a.out)
==30758==
==30758== Open file descriptor 3:
==30758== at 0x4F266C7: pipe (in /usr/lib64/libc-2.27.so)
==30758== by 0x400670: main (in a.out)
==30758==
==30758== Open file descriptor 38: /usr/share/applications/org.kde.akonadiimportwizard.desktop
==30758== <inherited from parent>
==30758==
==30758== Open file descriptor 27:
==30758== <inherited from parent>
==30758==
==30758== Open file descriptor 26:
==30758== <inherited from parent>
==30758==
==30758== Open file descriptor 2: /dev/pts/16
==30758== <inherited from parent>
==30758==
==30758== Open file descriptor 0: /dev/pts/16
==30758== <inherited from parent>
==30758==
==30758==
==30758== HEAP SUMMARY:
==30758== in use at exit: 0 bytes in 0 blocks
==30758== total heap usage: 1 allocs, 1 frees, 4,096 bytes allocated
==30758==
==30758== All heap blocks were freed -- no leaks are possible
==30758==
==30758== For counts of detected and suppressed errors, rerun with: -v
==30758== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)