Память, выделенная динамически, не освобождается
Этот дефект возникает, когда не освобождается блок памяти, выделенный через malloc, calloc, realloc, или new. Если память выделена в функции, дефект не возникает, если:
В рамках функции освобождается память с помощью free или delete.
Функция возвращает указатель, назначенный malloc, calloc, realloc, или new.
Функция сохраняет указатель в глобальной переменной или в параметре.
Функции динамического выделения памяти, такие как malloc выделить память в куче. Если вы не освободите память после использования, уменьшите объем памяти, доступной для другого распределения. На встраиваемых системах с ограниченной памятью вы можете исчерпать доступную кучную память даже во время выполнения программы.
Определите область доступа к динамически выделенной памяти. Освободите блок памяти в конце этой области.
Чтобы освободить блок памяти, используйте free на указателе, который использовался при выделении памяти. Например:
ptr = (int*)malloc(sizeof(int)); ... free(ptr);
Рекомендуется выделять и освобождать память в одном модуле на одном уровне абстракции. Например, в этом примере func выделяет и освобождает память на том же уровне, но func2 не делает.
void func() {
ptr = (int*)malloc(sizeof(int));
{
...
}
free(ptr);
}
void func2() {
{
ptr = (int*)malloc(sizeof(int));
...
}
free(ptr);
}| Группа: Динамическая память |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки: MEM_LEAK |
| Воздействие: среднее |
| CWE ID: 401, 404 |