Správa dynamické paměti

Lokálně - Linux

Pro ověření správnosti alokace/dealokace dynamické paměti je vhodné použít nástroj, který dokáže odhalit tyto problémy. Tím nástrojem je program Valgrind, který odhalí tyto nedostatky. Abyste ho mohli použít, je potřeba ho mít nainstalovaný, viz. sekce Instalace potřebných balíčků.

Použití je poté jednoduché (včetně kompilace):

  gcc -o program -g main.c
  valgrind --leak-check=full ./program

Lokálně - Windows

Pro správu paměti na OS Windows existuje program Dr. Memory, který umožňuje zobrazení úniků paměti nebo přístupu mimo alokovanou oblast.

Lokálně - macOS

Pro procesory s architekturou x86 (pouze do verze macOS 10.15) nebo amd64 použijte program valgrind, viz. návod na GitHub. Návod nebyl testován

Pro procesory řady arm64 (M1 a novější) není možné použít programu Valgrind a je třeba využít nativního programu Leaks nebo obdobného programu. Pokud budete hledat problém se zápisem nebo čtením do/z paměti, do překladače přidejte parametr -fsanitize=address, jak je napsáno dole. Pokud budete hledat problém se správou paměti, tento parametr -fsanitize=address odeberte (bohužel nelze kontrolovat obojí zároveň).

  clang -g -fsanitize=address -o program -g main.c
  leaks --list -q --atExit -- ./program

Pro detailnější popis zadejte do terminálu příkaz export MallocStackLogging=1, který rozšíří možnosti zobrazení informací. Pro zrušení detailnějšího výstupu zadejte příkaz unset MallocStackLogging

Přes BRUTE

Pokud nechcete využít programu valgrind na Vašem počítači, je možné vyzkoušet program přes BRUTE a zjistit tak problémy s dynamickou alokací přímo. Je potřeba dodržet následující adresářovou strukturu:

  soubor.zip
   |- main.c
   |- data
       |- vstup1.in
       |- vstup2.in
       ...

Zdrojový kód může být pouze v main.c a ve složce data poté libovolné množství datových souborů pro testování (např. vstup1.in, vstup2.in apod.), které zadáváte na standardní vstup (u úkolů např. pub01.in). Název a přípona je libovolná, pro každý soubor se vypíše extra výstup ve standarním formátu v BRUTE, ale bez porovnání s referenčním řešním, které zde neexistuje.

Testovací skript poté najdete v BRUTE pod záložkou Valgrind. Zde nemáte žádnou penalizaci za odevzdání ani nedostanete body, je to pouze testovací nástroj pro Valgrind. Max. doba běhu skriptu je 60s.

courses/b0b99prpa/tutorials/tipy_triky.txt · Last modified: 2024/11/25 16:06 by nentvond