Функции malloc, calloc, перевыделение и свободный не должны использоваться.
Функции malloc, calloc, перевыделение и свободный не должны использоваться.
Выделение памяти C-стиля и освобождение с помощью malloc
, calloc
, realloc
, или free
не безопасно с точки зрения типов и не вызывает конструкторов/деструктор класса, чтобы создать/удалить объекты.
Например, malloc
выделяет память объекту и возвращает указатель на выделенную память о типе void*
. Программа может затем неявно бросить возвращенный указатель на другой тип, который не может совпадать с намеченным типом объекта.
Использование их выделение и функции освобождения может привести к неопределенному поведению если:
Вы используете free
освобождать память выделило с оператором new
.
Вы используете оператор delete
освобождать память, выделенную с malloc
, calloc
, или realloc
.
Правило не нарушено, когда вы выполняете динамическое выделение памяти, или освобождение с помощью перегрузило new
и delete
операторы или пользовательские реализации malloc
и free
.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.