malloc
|
Определено в заголовочном файле
<stdlib.h>
|
||
|
void
*
malloc
(
size_t
size
)
;
|
||
Выделяет
size
байт неинициализированной памяти.
Если выделение памяти завершается успешно, возвращается указатель, который подходит для выравнивания любого типа объекта с фундаментальным выравниванием .
Если
size
равен нулю, поведение
malloc
определяется реализацией. Например, может быть возвращен нулевой указатель. Альтернативно, может быть возвращен ненулевой указатель; однако такой указатель не должен быть
разыменован
и должен быть передан в
free
во избежание утечек памяти.
|
Предыдущий вызов
free
,
free_sized
, и
free_aligned_sized
(since C23)
или
realloc
, который освобождает область памяти,
синхронизируется-с
вызовом
|
(since C11) |
Содержание |
Параметры
| size | - | количество байт для выделения |
Возвращаемое значение
При успешном выполнении возвращает указатель на начало вновь выделенной памяти. Чтобы избежать утечки памяти, возвращаемый указатель должен быть освобожден с помощью free() или realloc() .
При неудаче возвращает нулевой указатель.
Пример
#include <stdio.h> #include <stdlib.h> int main(void) { int *p1 = malloc(4*sizeof(int)); // выделяет память для массива из 4 int int *p2 = malloc(sizeof(int[4])); // то же, с прямым указанием типа int *p3 = malloc(4*sizeof *p3); // то же, без повторения имени типа if(p1) { for(int n=0; n<4; ++n) // заполняет массив p1[n] = n*n; for(int n=0; n<4; ++n) // выводит его обратно printf("p1[%d] == %d\n", n, p1[n]); } free(p1); free(p2); free(p3); }
Вывод:
p1[0] == 0 p1[1] == 1 p1[2] == 4 p1[3] == 9
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.22.3.4 Функция malloc (стр: 254)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.22.3.4 Функция malloc (стр. 349)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.20.3.3 Функция malloc (стр: 314)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.3.3 Функция malloc
Смотрите также
|
освобождает ранее выделенную память
(функция) |
|
|
C++ documentation
для
malloc
|
|