Память, выделенная динамически не освобожденный
Этот дефект происходит, когда вы не освобождаете блок от памяти, выделенной через 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++ |
| Значение по умолчанию: Off |
Синтаксис командной строки: MEM_LEAK |
| Удар: носитель |
| ID CWE: 401, 404 |