Malloc

Правильный заголовок этой статьи — malloc. Он показан некорректно из-за технических ограничений.

malloc (от англ. memory allocation, выделение памяти) и calloc (от англ. clear allocation, чистое выделение (памяти)) — функции выделения динамической памяти, входящие в стандартную библиотеку языка Си.

malloc принимает в качестве аргумента размер выделяемой области в байтах; возвращает нетипизированный указатель (void*) на область памяти заявленного размера или NULL в случае, если выделить память невозможно. Содержимое выделяемой области памяти не определено.

calloc принимает в качестве аргумента количество элементов и размер каждого элемента в байтах; возвращает нетипизированный указатель (void*) на область памяти заявленного размера или NULL в случае, если выделить память невозможно. Значения элементов устанавливаются в ноль. malloc работает быстрее, чем calloc, в связи с отсутствием функции обнуления выделяемой памяти.

Содержание

Характерные ошибки при использовании

  • Память остаётся «занятой», даже если ни один указатель в программе на неё не ссылается (для освобождения памяти используется функция free). Накопление «потерянных» участков памяти приводит к постепенной деградации системы. Ошибки, связанные с неосвобождением занятых участков памяти, называются утечками памяти (англ. memory leaks).
  • Если объём обрабатываемых данных больше, чем объём выделенной памяти, возможно повреждение других областей динамической памяти. Такие ошибки называются ошибками переполнения буфера (англ. buffer overflow).
  • Если указатель на выделенную область памяти после освобождения продолжает использоваться, то при обращении к «уже не существующему» блоку динамической памяти может произойти исключение (англ. exception), сбой программы, повреждение других данных или не произойти ничего (в зависимости от типа операционной системы и используемого аппаратного обеспечения).
  • Если для одной области памяти free вызывается более чем один раз, то это может повредить данные самой библиотеки, содержащей malloc/free, и привести к непредсказуемому поведению в произвольные моменты времени.

Точное поведение функций описано в стандарте ANSI C, на него же ссылается определение функции в стандарте POSIX.

Пример использования

malloc

dynamic_array = malloc( number_of_elements * sizeof( float ) );
if ( !dynamic_array )
{
   /* обработка ошибки памяти */
}
/* работа с элементами массива */
free( dynamic_array );
dynamic_array = NULL;

calloc

dynamic_array = calloc( number_of_elements, sizeof( float ) );
if ( !dynamic_array )
{
   /* обработка ошибки памяти */
}
/* работа с элементами массива */
free( dynamic_array );
dynamic_array = NULL;

См. также

Источники

  • malloc(англ.) — Описание функции malloc в стандарте POSIX.
  • calloc(англ.) — Описание функции calloc в стандарте POSIX.
 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home