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