malloc
Defined in header <stdlib.h> |
||
|---|---|---|
void *malloc( size_t size ); |
Выделяет size байтов неинициализированной памяти.
Если выделение успешно, возвращает указатель, подходяще выровненный для любого типа объекта с фундаментальным выравниванием.
Если size равно нулю, поведение malloc определяется реализацией. Например, может быть возвращён нулевой указатель. В качестве альтернативы может быть возвращён ненулевой указатель; однако такой указатель не следует использовать, и его следует передать в free для предотвращения утечек памяти.
|
Предыдущий вызов |
(с C11) |
Параметры
| size | - | количество байтов для выделения |
Возвращаемое значение
При успехе возвращает указатель на начало выделенной памяти. Для предотвращения утечки памяти возвращённый указатель необходимо освободить с помощью free() или realloc().
При ошибке возвращает нулевой указатель.
Пример
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p1 = malloc(4*sizeof(int)); // allocates enough for an array of 4 int
int *p2 = malloc(sizeof(int[4])); // same, naming the type directly
int *p3 = malloc(4*sizeof *p3); // same, without repeating the type name
if(p1) {
for(int n=0; n<4; ++n) // populate the array
p1[n] = n*n;
for(int n=0; n<4; ++n) // print it back out
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++ для malloc |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/memory/malloc