logo

Assignació de memòria dinàmica en C

El concepte de assignació de memòria dinàmica en llenguatge c permet que el programador C assigni memòria en temps d'execució . L'assignació de memòria dinàmica en llenguatge c és possible mitjançant 4 funcions del fitxer de capçalera stdlib.h.

  1. malloc()
  2. calloc()
  3. realloc()
  4. gratuït ()

Abans d'aprendre les funcions anteriors, entenem la diferència entre l'assignació de memòria estàtica i l'assignació de memòria dinàmica.

assignació de memòria estàticaassignació de memòria dinàmica
la memòria s'assigna en temps de compilació.la memòria s'assigna en temps d'execució.
La memòria no es pot augmentar mentre s'executa el programa.La memòria es pot augmentar mentre s'executa el programa.
utilitzat en matriu.utilitzat a la llista enllaçada.

Ara fem una ullada ràpida als mètodes utilitzats per a l'assignació de memòria dinàmica.

malloc() assigna un sol bloc de memòria sol·licitada.
calloc() assigna diversos blocs de memòria sol·licitada.
realloc() reassigna la memòria ocupada per les funcions malloc() o calloc().
gratuït () allibera la memòria assignada dinàmicament.

funció malloc() en C

La funció malloc() assigna un sol bloc de memòria sol·licitada.

No inicialitza la memòria en el moment de l'execució, de manera que inicialment té un valor d'escombraries.

Retorna NULL si la memòria no és suficient.

alter afegir columna oracle

La sintaxi de la funció malloc() es mostra a continuació:

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

Vegem l'exemple de la funció 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)>

funció calloc() en C

La funció calloc() assigna diversos blocs de memòria sol·licitada.

Inicialitza inicialment tots els bytes a zero.

Retorna NULL si la memòria no és suficient.

La sintaxi de la funció calloc() es mostra a continuació:

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

Vegem l'exemple de la funció calloc().

ordenar una matriu java
 #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)>

funció realloc() en C

Si la memòria no és suficient per a malloc() o calloc(), podeu reassignar la memòria mitjançant la funció realloc(). En resum, canvia la mida de la memòria.

Vegem la sintaxi de la funció realloc().

 ptr=realloc(ptr, new-size) 

funció free() en C

La memòria ocupada per les funcions malloc() o calloc() s'ha d'alliberar cridant a la funció free(). En cas contrari, consumirà memòria fins a la sortida del programa.

Vegem la sintaxi de la funció free().

 free(ptr)