Il concetto di allocazione dinamica della memoria in linguaggio c consente al programmatore C di allocare memoria in fase di esecuzione . L'allocazione dinamica della memoria in linguaggio C è possibile tramite 4 funzioni del file di intestazione stdlib.h.
- malloc()
- calloc()
- rialloc()
- gratuito()
Prima di apprendere le funzioni di cui sopra, comprendiamo la differenza tra allocazione di memoria statica e allocazione di memoria dinamica.
mini barra degli strumenti Excel
allocazione di memoria statica | allocazione dinamica della memoria |
---|---|
la memoria viene allocata in fase di compilazione. | la memoria viene allocata in fase di esecuzione. |
la memoria non può essere aumentata durante l'esecuzione del programma. | la memoria può essere aumentata durante l'esecuzione del programma. |
utilizzato nell'array. | utilizzato nell'elenco collegato. |
Ora diamo una rapida occhiata ai metodi utilizzati per l'allocazione dinamica della memoria.
malloc() | alloca un singolo blocco di memoria richiesta. |
calloc() | alloca più blocchi di memoria richiesta. |
rialloc() | rialloca la memoria occupata dalle funzioni malloc() o calloc(). |
gratuito() | libera la memoria allocata dinamicamente. |
Funzione malloc() in C
La funzione malloc() alloca un singolo blocco di memoria richiesta.
Non inizializza la memoria in fase di esecuzione, quindi inizialmente ha un valore spazzatura.
carattere in lattice
Restituisce NULL se la memoria non è sufficiente.
La sintassi della funzione malloc() è riportata di seguito:
ptr=(cast-type*)malloc(byte-size)
Vediamo l'esempio della funzione malloc().
#include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d',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's see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d',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'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's see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>
funzione calloc() in C
La funzione calloc() alloca più blocchi di memoria richiesta.
Inizialmente inizializza tutti i byte a zero.
Restituisce NULL se la memoria non è sufficiente.
La sintassi della funzione calloc() è riportata di seguito:
css primo figlio
ptr=(cast-type*)calloc(number, byte-size)
Vediamo l'esempio della funzione calloc().
#include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d',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'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's see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>
funzione realloc() in C
Se la memoria non è sufficiente per malloc() o calloc(), è possibile riallocare la memoria tramite la funzione realloc(). In breve, cambia la dimensione della memoria.
Vediamo la sintassi della funzione realloc().
java sostituisci tutto
ptr=realloc(ptr, new-size)
funzione free() in C
La memoria occupata dalle funzioni malloc() o calloc() deve essere liberata chiamando la funzione free(). Altrimenti, consumerà memoria fino all'uscita dal programma.
Vediamo la sintassi della funzione free().
free(ptr)