| Назад | 
Для динамического выделения процессу дополнительной памяти, в системе предусмотрены четыре функции.
Форматы вызова перечисленных процедур следующие:
#include <sys/types.h> #include <stdlib.h> void *malloc (size_t size); void *calloc (size_t nobj, size_t size); void *realloc (void *ptr, size_t newsize); void free (void *ptr);
Здесь:
| size | - в случае malloc( ) - размер выделяемой области памяти в байтах; в случае calloc( ) - размер в байтах элемента массива данных, под который выделяется память; | 
| nobj | - число элементов массива данных; | 
| ptr | - указатель на ранее выделенную память; | 
| newsize | - новый размер области памяти. | 
Функции malloc( ), calloc( ) и realloc( ) возвращают указатель на выделенную память или NULL, если свободного сегмента указанного размера найти не удалось. Адрес памяти, возвращаемый процедурами, гарантировано выравнивается на границу максимального по размеру типа данных в системе. Обычно это тип double, размер которого равен восьми байтам.
В приводимом примере мы заказываем память под матрицу чисел и заполняем ее единицами.
#include <stdlib.h>
void FillMatrix (int **matrix, int nrows, int ncols)
{
  int i, j;
  for (i=0; i <nrows; i++)
    for (j=0; j<nrows; j++)
      matrix [i] [j] = 1;
}
void main( )
{
  int **matrix;
  if ((matrix=(int**)malloc(100*sizeof(int*)) == NULL) {
    puts ("no memory\n");
  exit (1);
  }
  for (i=0; i<100; i++)
    if ( (matrix [i] = (int*)calloc(100, sizeof(int)) == NULL) {
      puts ("no memory\n");
      exit (1);
    }
  }
  FillMatrix (matrix, 100, 100);
  for (i=0; i<100; i++)
    free (void*)matrix[i]);
  free ( (void*)matrix);
  exit (0);
}
Здесь мы намеренно, в демонстрационных целях, применяли разные функции для выделения памяти.