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