Spec-Zone.ru › C

malloc

Defined in header <stdlib.h>
void *malloc( size_t size );

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

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

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

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

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

(с 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

См. также

free
освобождает ранее выделенную память
(функция)
Документация C++ для malloc

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/memory/malloc

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API