malloc
| Определено в заголовочном файле <stdlib.h>
|
||
void *malloc( size_t size ); |
||
Выделяет size байт неинициализированной памяти.
При успешном выделении возвращает указатель, выравненный подходящим образом для объекта любого типа с помощью фундаментального выравнивания.
Если size равен нулю, то поведение malloc зависит от реализации. Например, может быть возвращён нулевой указатель. Также может быть возвращён и ненулевой указатель; однако такой указатель не должен разыменовываться, и должен быть передан в функцию free, чтобы избежать утечек памяти.
|
Предшествующий вызов free или realloc, который освобождает область памяти синхронизируется с вызовом |
(начиная с 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++ по malloc
| |