Виявлення витоків пам'яті в C
При написанні програм, що використовують динамічне виділення пам'яті (функції malloc, calloc, realloc, free), необхідно пам'ятати про звільнення всієї коли-небудь виділеної пам'яті. «Витоком пам'яті» називається ситуація, коли програма з яких-небудь причин не звільняє пам'ять, яка більше не буде використовуватися. Необхідно вміти виявляти подібні проблеми!
Далі наводяться практичні поради для виявлення витоків пам'яті в залежності від використовуваного компілятора.
Microsoft Visual C Compiler / MS Windows
На початку вашої програми додайте наступні рядки (важливо дотримуватися порядку!)
і потім додайте в кінець вашої функції main виклик
Ця функція роздрукує повідомлення в Output window з інформацією про витоки пам'яті, якщо такі є.
Нижче показаний приклад такого повідомлення
Зазначена наступна інформація про кожну витоку пам'яті: місце в файлі, де пам'ять була виділена, розмір виділеної пам'яті і її вміст.
GNU Compiler Collection / Linux
На початку вашої програми додайте наступний рядок
і в самий початок функції main виклик
Потім просто запускаєте вашу програму і після неї утиліту mtrace
Висновок утиліти mtrace містить інформацію про витоки пам'яті із зазначенням місця у файлі, де пам'ять була виділена, і розміру виділеної пам'яті.
GNU Compiler Collection (MinGW) / MS Windows
Модифікацій вихідного тексту програми не потрібно. Необхідно скомпілювати програму з наступними прапорами:
Потім запустити вашу програму за допомогою Dr. Memory:
Висновок містить інформацію про наявні проблеми при роботі з динамічною пам'яттю, зокрема про витоки пам'яті:
Також можна знайти інформацію про джерело витоку в вихідному коді програми із зазначенням місця у файлі.