Освобождение указателя без соответствующего динамического выделения
Недопустимый свободный от указателя происходит, когда блок памяти выпущенное использование функции free
не был ранее выделен с помощью malloc
, calloc
или realloc
.
Функция free
выпускает блок памяти, выделенной на куче. При попытке получить доступ к местоположению на куче, которую вы не выделили ранее, отказ сегментации может произойти.
Проблема может подсветить ошибки кодирования. Например, вы, возможно, хотели использовать функцию free
или предыдущую функцию malloc
на различном указателе.
В большинстве случаев можно устранить проблему путем удаления оператора free
. Если указатель не является выделенной памятью от кучи с malloc
или calloc
, вы не должны освобождать указатель. Можно просто снова использовать указатель как требуется.
Если проблема подсвечивает ошибку кодирования, такую как использование free
или malloc
на неправильном указателе, исправьте ошибку.
Если проблема происходит, потому что вы используете функцию free
, чтобы освободить память выделенный с оператором new
, заменяете функцию free
на оператор delete
.
Группа: динамическая память |
Язык: C | C++ |
Значение по умолчанию: на |
Синтаксис командной строки: BAD_FREE |
Влияние: высоко |
ID CWE: 404, 590, 762 |