Namespaces
Variants

malloc

From cppreference.net
Определено в заголовочном файле <stdlib.h>
void * malloc ( size_t size ) ;

Выделяет size байт неинициализированной памяти.

Если выделение памяти завершается успешно, возвращается указатель, который подходит для выравнивания любого типа объекта с фундаментальным выравниванием .

Если size равен нулю, поведение malloc определяется реализацией. Например, может быть возвращен нулевой указатель. Альтернативно, может быть возвращен ненулевой указатель; однако такой указатель не должен быть разыменован и должен быть передан в free во избежание утечек памяти.

malloc является потокобезопасной: она ведет себя так, как если бы обращалась только к областям памяти, видимым через ее аргумент, и не к какому-либо статическому хранилищу.

Предыдущий вызов free , free_sized , и free_aligned_sized (since C23) или realloc , который освобождает область памяти, синхронизируется-с вызовом malloc , который выделяет ту же самую или часть той же области памяти. Эта синхронизация происходит после любого доступа к памяти функцией освобождения и до любого доступа к памяти функцией malloc . Существует единый общий порядок всех функций выделения и освобождения, работающих с каждой конкретной областью памяти.

(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