Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

C Динамическое выделение памяти

Динамическое выделение памяти C

В этом руководстве вы научитесь динамически выделять память в своей программе на C, используя стандартные библиотечные функции:malloc(), calloc(), free() и realloc().

Как вы знаете, массив представляет собой набор фиксированного числа значений. Как только размер массива объявлен, вы не можете его изменить.

Иногда размер объявленного вами массива может оказаться недостаточным. Чтобы решить эту проблему, вы можете выделить память вручную во время выполнения. В программировании на C это называется динамическим выделением памяти.

Для динамического выделения памяти библиотечные функции имеют значение malloc(). , calloc() , realloc() и free() используются. Эти функции определены в <stdlib.h> файл заголовка.

<час>

C malloc()

Имя «malloc» означает выделение памяти.

malloc() функция резервирует блок памяти указанного количества байтов. И он возвращает указатель void которые можно преобразовать в указатели любой формы.

<час>

Синтаксис malloc()

ptr = (castType*) malloc(size);

Пример

ptr = (float*) malloc(100 * sizeof(float));

Приведенный выше оператор выделяет 400 байт памяти. Это потому, что размер float составляет 4 байта. И указатель ptr содержит адрес первого байта в выделенной памяти.

Результатом выражения является NULL указатель, если память не может быть выделена.

<час>

C calloc()

Название "calloc" означает непрерывное выделение.

malloc() выделяет память и оставляет память неинициализированной, тогда как calloc() функция выделяет память и обнуляет все биты.

<час>

Синтаксис calloc()

ptr = (castType*)calloc(n, size);

Пример:

ptr = (float*) calloc(25, sizeof(float));

Приведенный выше оператор выделяет непрерывное пространство в памяти для 25 элементов типа float. .

<час>

С бесплатно()

Динамически выделяемая память, созданная с помощью calloc() или malloc() не освобождается самостоятельно. Вы должны явно использовать free() чтобы освободить место.

<час>

Синтаксис функции free()

free(ptr);

Этот оператор освобождает место, выделенное в памяти, на которое указывает ptr. .

<час>

Пример 1:malloc() и free()

// Program to calculate the sum of n numbers entered by the user

#include <stdio.h>
#include <stdlib.h>

int main() {
  int n, i, *ptr, sum = 0;

  printf("Enter number of elements: ");
  scanf("%d", &n);

  ptr = (int*) malloc(n * sizeof(int));
 
  // if memory cannot be allocated
  if(ptr == NULL) {
    printf("Error! memory not allocated.");
    exit(0);
  }

  printf("Enter elements: ");
  for(i = 0; i < n; ++i) {
    scanf("%d", ptr + i);
    sum += *(ptr + i);
  }

  printf("Sum = %d", sum);
  
  // deallocating the memory
  free(ptr);

  return 0;
}

Вывод

Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156

Здесь мы динамически выделили память для n количество int .

<час>

Пример 2:calloc() и free()

// Program to calculate the sum of n numbers entered by the user

#include <stdio.h>
#include <stdlib.h>

int main() {
  int n, i, *ptr, sum = 0;
  printf("Enter number of elements: ");
  scanf("%d", &n);

  ptr = (int*) calloc(n, sizeof(int));
  if(ptr == NULL) {
    printf("Error! memory not allocated.");
    exit(0);
  }

  printf("Enter elements: ");
  for(i = 0; i < n; ++i) {
    scanf("%d", ptr + i);
    sum += *(ptr + i);
  }

  printf("Sum = %d", sum);
  free(ptr);
  return 0;
}

Вывод

Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156
<час>

C realloc()

Если динамически выделенной памяти недостаточно или больше, чем требуется, вы можете изменить размер ранее выделенной памяти с помощью realloc() функция.

<час>

Синтаксис realloc()

ptr = realloc(ptr, x);

Здесь ptr перераспределяется с новым размером x .

<час>

Пример 3:realloc()

#include <stdio.h>
#include <stdlib.h>

int main() {
  int *ptr, i , n1, n2;
  printf("Enter size: ");
  scanf("%d", &n1);

  ptr = (int*) malloc(n1 * sizeof(int));

  printf("Addresses of previously allocated memory:\n");
  for(i = 0; i < n1; ++i)
    printf("%pc\n",ptr + i);

  printf("\nEnter the new size: ");
  scanf("%d", &n2);

  // rellocating the memory
  ptr = realloc(ptr, n2 * sizeof(int));

  printf("Addresses of newly allocated memory:\n");
  for(i = 0; i < n2; ++i)
    printf("%pc\n", ptr + i);
  
  free(ptr);

  return 0;
}

Вывод

Enter size: 2
Addresses of previously allocated memory:
26855472
26855476

Enter the new size: 4
Addresses of newly allocated memory:
26855472
26855476
26855480
26855484

Язык C

  1. Постоянная память (ПЗУ)
  2. Микропроцессоры
  3. Управление памятью C++:создание и удаление
  4. Cervoz обновляет память DDR4-2666 следующего поколения
  5. C++ динамическое выделение массивов с примером
  6. Функция calloc() в библиотеке C с программой ПРИМЕР
  7. Функция realloc() в библиотеке C:как использовать? Синтаксис и пример
  8. C - Управление памятью
  9. Динамическое ценообразование в традиционной розничной торговле неизбежно
  10. Динамическая память С++