Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

C Alocação de Memória Dinâmica

Alocação de memória dinâmica C


Neste tutorial, você aprenderá a alocar memória dinamicamente em seu programa C usando funções de biblioteca padrão:malloc(), calloc(), free() e realloc().

Como você sabe, um array é uma coleção de um número fixo de valores. Uma vez que o tamanho de um array é declarado, você não pode alterá-lo.

Às vezes, o tamanho do array que você declarou pode ser insuficiente. Para resolver esse problema, você pode alocar memória manualmente durante o tempo de execução. Isso é conhecido como alocação dinâmica de memória na programação C.

Para alocar memória dinamicamente, as funções da biblioteca são malloc() , calloc() , realloc() e free() são usados. Essas funções são definidas no <stdlib.h> arquivo de cabeçalho.


C malloc()


O nome "malloc" significa alocação de memória.

O malloc() A função reserva um bloco de memória do número especificado de bytes. E retorna um ponteiro de void que podem ser convertidos em ponteiros de qualquer forma.

Sintaxe de malloc()

ptr = (castType*) malloc(size);

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

A instrução acima aloca 400 bytes de memória. É porque o tamanho de float é 4 bytes. E o ponteiro ptr contém o endereço do primeiro byte na memória alocada.

A expressão resulta em um NULL ponteiro se a memória não puder ser alocada.

C calloc()




O nome "calloc" significa alocação contígua.

O malloc() função aloca memória e deixa a memória não inicializada, enquanto a função calloc() função aloca memória e inicializa todos os bits para zero.

Sintaxe de calloc()

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

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

A instrução acima aloca espaço contíguo na memória para 25 elementos do tipo float .

C livre()


Memória alocada dinamicamente criada com calloc() ou malloc() não se liberta sozinho. Você deve usar explicitamente free() para liberar o espaço.

Sintaxe de free()

free(ptr);

Esta instrução libera o espaço alocado na memória apontada por ptr .

Exemplo 1:malloc() e 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;
}

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

Aqui, alocamos dinamicamente a memória para n número de int .

Exemplo 2:calloc() e 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;
}

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

C realloc()


Se a memória alocada dinamicamente for insuficiente ou mais do que o necessário, você pode alterar o tamanho da memória alocada anteriormente usando o realloc() função.

Sintaxe de realloc()

ptr = realloc(ptr, x);

Aqui, ptr é realocado com um novo tamanho x .

Exemplo 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;
}

Saída
Enter size: 2
Addresses of previously allocated memory:
26855472
26855476

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

Linguagem C

  1. Memória somente leitura (ROM)
  2. Microprocessadores
  3. Gerenciamento de memória C++:novo e excluir
  4. O Cervoz atualiza a memória DDR4-2666 de próxima geração
  5. Alocação dinâmica de matrizes em C++ com exemplo
  6. Função calloc() na biblioteca C com o programa EXEMPLO
  7. Função realloc() na Biblioteca C:Como usar? Sintaxe e Exemplo
  8. C - Gerenciamento de Memória
  9. O preço dinâmico no varejo tradicional é inevitável
  10. Memória Dinâmica C++