Утечка памяти — типичная ошибка программирования , когда компьютерная программа не освобождает зарезервированную память. Когда часть программы, содержащая утечку памяти, выполняется достаточное количество раз, свободная память может закончиться, что приведет к сбою программного обеспечения. Некоторые языки программирования, такие как Java , имеют автоматический сборщик мусора, который пытается освободить ресурсы, зарезервированные программным обеспечением, для повторного использования программой. Однако такого автоматического сборщика мусора нет, например, в C и C++.:в. Его можно реализовать с помощью существующих библиотек или реализовать самостоятельно в конце программы, записав нули во все переменные. Также полезно учитывать ситуации переполнения и потери памяти.
Для обнаружения утечки памяти можно составить тестовую программу, выполняющую функцию несколько раз подряд. Если программа продолжает давать сбой на одной и той же фазе выполнения, возможно, обнаружена проблемная точка в коде, вызывающая утечку памяти. Существующий код также можно проверить с помощью как коммерческих, так и бесплатных инструментов, например IBM Rational Purify , BoundsChecker , Valgrind , Insure++ и memwatch — одни из самых популярных средств отслеживания утечек памяти C и C++.
Ситуация с переполнением и недостатком памяти
В ситуации переполнения памяти производится запись по области, предназначенной для записи, например путем записи десяти байтов в область из пяти байт. В случае переполнения памяти в середину области, определяемой как переменная, ставится знак конца области, что предназначено для обозначения начала инструкций машинного языка.