Назад к вопросам
Открытые Решения
Junior — Middle
97
Какие отличия существуют между функциями malloc и new в управлении динамической памятью?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
malloc и new — это разные механизмы выделения динамической памяти, используемые в C и C++ соответственно, с рядом отличий:
-
malloc (C)
- Выделяет блок памяти заданного размера в байтах.
- Возвращает указатель типа
void*, который нужно явно привести к нужному типу. - Не вызывает конструкторы объектов.
- Не инициализирует память (содержимое не определено).
- Освобождение памяти происходит с помощью
free().
-
new (C++)
- Выделяет память и одновременно вызывает конструктор объекта.
- Возвращает указатель нужного типа, приведение не требуется.
- Инициализирует объект согласно конструктору.
- Освобождение памяти и вызов деструктора происходит через
delete.
Пример:
// malloc
int* p1 = (int*)malloc(sizeof(int));
*p1 = 42; // память не инициализирована, нужно явно присвоить
free(p1);
// new
int* p2 = new int(42); // память выделена и инициализирована значением 42
delete p2;
Таким образом, new более безопасен и удобен для работы с объектами в C++, так как управляет инициализацией и вызовом конструкторов, в то время как malloc — низкоуровневый способ выделения памяти без инициализации.