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
|