Ответ
Да, работал, в основном в коде на чистом C или при интеграции с C-библиотеками. malloc выделяет неинициализированную память в куче и возвращает void*.
Базовый пример использования:
#include <stdlib.h>
int* create_int_array(size_t size) {
// Выделяем память под массив из `size` целых чисел
int* arr = (int*)malloc(size * sizeof(int));
if (arr == NULL) {
// Критически важно проверять на NULL
fprintf(stderr, "Ошибка выделения памятиn");
exit(EXIT_FAILURE);
}
// Память содержит "мусор", нужно инициализировать
for (size_t i = 0; i < size; ++i) {
arr[i] = 0;
}
return arr;
}
// ...
free(arr); // Обязательное освобождение
Ключевые отличия от new в C++:
mallocне вызывает конструкторы объектов,new— вызывает.mallocтребует явного приведения типа.freeне вызывает деструкторы,delete— вызывает.
В современном C++ я предпочитаю использовать new/delete для одиночных объектов, а для массивов — std::vector или умные указатели (std::unique_ptr, std::shared_ptr), которые автоматически управляют памятью и безопаснее.