Что означает утечка памяти?
В С очень распространена работа с указателями на объекты, а не с их копиями, как, например, зачастую бывает в языке C#. Утечка памяти - это когда программист использует указатель на объект, работает с ним, а после - просто забивает на этот указатель и продолжает работу над другими аспектами. Указатель на область памяти при этом остаётся нетронутой, и во второй раз, если не "очищать" указатель, то обратиться к этому же участу памяти будет невозможно. Это и называется "утечкой памяти". При этом автоматической сборки мусора как в C# в C нету, так что всё нужно делать "руками".
Утечки памяти опасны тем, что они "забирают" память на себя, и, тем самым полностью засоряют оперативную память, из-за чего устройство начинает виснуть. Так что убирать их, так или иначе, необходимо (а точнее - не допускать утечек памяти вообще).