debugging/valgrind/example_use_after_free
Valgrind
Example: Valgrind - Use after free
Source code
use_after_free.c++
#include <iostream> int main(int argc, char *argv[]) { char *charArray = new char[10]; delete [] charArray; std::cout << charArray[0] << std::endl; }
Set up valgrind environment
module add \ \ compiler/gnu devel/valgrind
Compile
c++ -O1 -g use_after_free.c++ -o use_after_free
Examine
use_after_free
program with valgrind memcheckervalgrind ./use_after_free
==17825== Memcheck, a memory error detector ==17825== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al. ==17825== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info ==17825== Command: ./use_after_free ==17825== ==17825== Invalid read of size 1 ==17825== at 0x10919F: main (use_after_free.c++:6) ==17825== Address 0x4df7c80 is 0 bytes inside a block of size 10 free'd ==17825== at 0x4849A7F: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==17825== by 0x10919E: main (use_after_free.c++:5) ==17825== Block was alloc'd at ==17825== at 0x48472E3: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==17825== by 0x109193: main (use_after_free.c++:4) ==17825== ==17825== ==17825== HEAP SUMMARY: ==17825== in use at exit: 0 bytes in 0 blocks ==17825== total heap usage: 3 allocs, 3 frees, 73,738 bytes allocated ==17825== ==17825== All heap blocks were freed -- no leaks are possible ==17825== ==17825== For lists of detected and suppressed errors, rerun with: -s ==17825== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)