Память, освобожденная несколько раз без выделения
Освобождение ранее освобожденного указателя происходит, когда блок памяти освобожден несколько раз с помощью функции free
без промежуточного выделения.
Когда указатель является выделенной динамической памятью с malloc
, calloc
или realloc
, это указывает на ячейку памяти на куче. Когда вы используете функцию free
на этом указателе, связанный блок памяти освобожден для перераспределения. Попытка освободить этот блок от памяти может привести к отказу сегментации.
Фиксация зависит от первопричины дефекта. Смотрите, намеревались ли вы выделить блок памяти указателю между первым освобождением и вторым. В противном случае удалите второй оператор free
.
Как хорошая практика, после того, как вы освободите блок памяти, присваивают соответствующий указатель на NULL. Прежде, чем освободить указатели, проверяйте их на Нулевые значения и обработайте ошибку. Таким образом вы защищены от освобождения уже освобожденного блока.
Группа: Динамическая память |
Язык: C | C++ |
Значение по умолчанию: на |
Синтаксис командной строки: DOUBLE_DEALLOCATION |
Влияние: высоко |
ID CWE: 415, 825 |