malloc

Выделяет блоки памяти.

void *malloc(
   size_t size 
);

Параметры

  • size
    Байты, которые нужно выделить.

Возвращаемое значение

malloc возвращает недействительный указатель в выделенное пространство или NULL, если недоступно достаточно памяти. Чтобы восстановить для указателя тип, отличный от void, используйте приведение типа для возвращаемого значения. Гарантируется, что пространство для хранения, на которое указало возвращенное значение, будет соответствующим образом выровнено для хранения любого типа объекта с требованием о выравнивании менее или равно стандартному выравниванию. (В Visual C++ основным выравниванием является выравнивание, необходимое для double или 8 байт. В коде, который нацелен на 64-разрядные платформы, это 16 байт.) Используйте _aligned_malloc для выделения памяти для объектов, которые имеют высокие требования к выравниванию — например, типы SSE __m128 и __m256 и типы, объявляемые с помощью __declspec(align(n)), где n больше 8. Если значение size равно 0, malloc выделяет элемент нулевой длины в куче и возвращает допустимый указатель на этот элемент. Всегда проверяйте возврат из malloc, даже если запрашиваемый объем памяти очень мал.

Заметки

Функция malloc выделяет блок памяти по крайней мере байтов size. Блок может иметь несколько байтов size из-за пространства, необходимый для выравнивания и данных обслуживания.

malloc задает для параметра errno значение ENOMEM, если выделение памяти завершается сбоем или количество запрошенной памяти превышает _HEAP_MAXREQ. Сведения об этих и других кодах ошибок см. в разделе errno, _doserrno, _sys_errlist, and _sys_nerr.

Код запуска используется malloc, чтобы выделить хранилище для переменных _environ, envp и argv. Следующие функции и их широкосимвольные аналоги также вызывают malloc.

calloc

fscanf

_getw

setvbuf

функции _exec

fseek

_popen

функции _spawn

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

системный

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

получает

_searchenv

 

Функция _set_new_mode C++ задает новый режим обработчика события malloc. Указывает, может ли новый режим обработки, при сбое вызова malloc, использовать новую процедуру обработчика как набор _set_new_handler. По умолчанию malloc не вызывает новую процедуру обработчика при сбое выделения памяти. Можно переопределить это поведение по умолчанию, чтобы в случае сбоя предоставления памяти методом malloc метод malloc вызывал новую процедуру обработчика таким же образом, как это делает оператор new при сбое по той же причине. Чтобы переопределить значение по умолчанию, вызовите

_set_new_mode(1)

на ранних этапах программы или компонуйте с использованием NEWMODE.OBJ (см. Параметры ссылок).

Когда приложение связано с отладочной версией библиотек времени выполнения языка C, malloc соответствует _malloc_dbg. Дополнительные сведения о том, как происходит управление кучей в процессе отладки см. в разделе Сведения о куче отладки CRT.

malloc помечен __declspec(noalias) и __declspec(restrict); это означает, что функция гарантированно не изменит глобальные переменные, а для возвращаемого указателя не будет создан псевдоним. Дополнительные сведения см. в разделах noalias и restrict.

Требования

Подпрограмма

Обязательный заголовок

malloc

<stdlib.h> и <malloc.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Библиотеки

Все версии библиотек времени выполнения C.

Пример

// crt_malloc.c
// This program allocates memory with
// malloc, then frees the memory with free.
 

#include <stdlib.h>   // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>

int main( void )
{
   char *string;

   // Allocate space for a path name
   string = malloc( _MAX_PATH );

   // In a C++ file, explicitly cast malloc's return.  For example, 
   // string = (char *)malloc( _MAX_PATH );

   if( string == NULL )
      printf( "Insufficient memory available\n" );
   else
   {
      printf( "Memory space allocated for path name\n" );
      free( string );
      printf( "Memory freed\n" );
   }
}
  

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Для получения дополнительной информации см. Примеры вызовов неуправляемого кода.

См. также

Ссылки

Выделение памяти

calloc

свободные

realloc

_aligned_malloc