logo

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

O conceito de alocação dinâmica de memória em linguagem c permite que o programador C aloque memória em tempo de execução . A alocação dinâmica de memória em linguagem c é possível por 4 funções do arquivo de cabeçalho stdlib.h.

  1. Malloc()
  2. chamadaoc()
  3. realocar()
  4. livre()

Antes de aprender as funções acima, vamos entender a diferença entre alocação de memória estática e alocação de memória dinâmica.

alocação de memória estáticaalocação dinâmica de memória
a memória é alocada em tempo de compilação.a memória é alocada em tempo de execução.
a memória não pode ser aumentada durante a execução do programa.a memória pode ser aumentada durante a execução do programa.
usado na matriz.usado na lista vinculada.

Agora vamos dar uma olhada rápida nos métodos usados ​​para alocação dinâmica de memória.

contador java
Malloc() aloca um único bloco de memória solicitada.
chamadaoc() aloca vários blocos de memória solicitada.
realocar() realoca a memória ocupada pelas funções malloc() ou calloc().
livre() libera a memória alocada dinamicamente.

função malloc() em C

A função malloc() aloca um único bloco de memória solicitada.

Ele não inicializa a memória em tempo de execução, portanto inicialmente possui valor lixo.

Retorna NULL se a memória não for suficiente.

A sintaxe da função malloc() é fornecida abaixo:

 ptr=(cast-type*)malloc(byte-size) 

Vamos ver o exemplo da função malloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let&apos;s see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>

Função calloc() em C

A função calloc() aloca vários blocos de memória solicitada.

Inicialmente inicializa todos os bytes para zero.

Retorna NULL se a memória não for suficiente.

A sintaxe da função calloc() é fornecida abaixo:

 ptr=(cast-type*)calloc(number, byte-size) 

Vamos ver o exemplo da função calloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>

função realloc() em C

Se a memória não for suficiente para malloc() ou calloc(), você pode realocar a memória pela função realloc(). Resumindo, altera o tamanho da memória.

Vamos ver a sintaxe da função realloc().

estrutura de primavera
 ptr=realloc(ptr, new-size) 

função free() em C

A memória ocupada pelas funções malloc() ou calloc() deve ser liberada chamando a função free(). Caso contrário, consumirá memória até a saída do programa.

Vamos ver a sintaxe da função free().

 free(ptr)