Виявлення витоків пам'яті в c

Виявлення витоків пам'яті в 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:

Висновок містить інформацію про наявні проблеми при роботі з динамічною пам'яттю, зокрема про витоки пам'яті:

Також можна знайти інформацію про джерело витоку в вихідному коді програми із зазначенням місця у файлі.

Схожі статті