Valgrind is an extremely powerful development tool, which detects and pin-points many common programming errors when running a program. Some examples for the problems it handles are many kinds of buffer overflows, using uninitialized data, accessing freed memory and memory leaks. Valgrind does that without need for recompilation of the program, simply by adding "valgrind" to the beginning of the command line.
To an outside observer, this could seem like magic. In this lecture, we will take a peek under the hood of valgrind, and learn how the magic is done. I will also briefly introduce other, less known features of valgrind.
For more information about valgrind, see Wikipedia and link above.