logo

Allocation dynamique de mémoire en C

La notion de allocation dynamique de mémoire en langage C permet au programmeur C d'allouer de la mémoire au moment de l'exécution . L'allocation dynamique de mémoire en langage C est possible grâce à 4 fonctions du fichier d'en-tête stdlib.h.

  1. malloc()
  2. calloc()
  3. réaffecter()
  4. gratuit()

Avant d'apprendre les fonctions ci-dessus, comprenons la différence entre l'allocation de mémoire statique et l'allocation de mémoire dynamique.

allocation de mémoire statiqueallocation de mémoire dynamique
la mémoire est allouée au moment de la compilation.la mémoire est allouée au moment de l'exécution.
la mémoire ne peut pas être augmentée lors de l'exécution du programme.la mémoire peut être augmentée lors de l'exécution du programme.
utilisé dans un tableau.utilisé dans la liste chaînée.

Jetons maintenant un coup d'œil rapide aux méthodes utilisées pour l'allocation dynamique de mémoire.

conversion d'entier en chaîne
malloc() alloue un seul bloc de mémoire demandée.
calloc() alloue plusieurs blocs de mémoire demandée.
réaffecter() réalloue la mémoire occupée par les fonctions malloc() ou calloc().
gratuit() libère la mémoire allouée dynamiquement.

fonction malloc() en C

La fonction malloc() alloue un seul bloc de mémoire demandée.

Il n'initialise pas la mémoire au moment de l'exécution, il a donc initialement une valeur inutile.

Il renvoie NULL si la mémoire n'est pas suffisante.

liste trier java

La syntaxe de la fonction malloc() est donnée ci-dessous :

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

Voyons l'exemple de la fonction 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)>

fonction calloc() en C

La fonction calloc() alloue plusieurs blocs de mémoire demandée.

Il initialise initialement tous les octets à zéro.

Il renvoie NULL si la mémoire n'est pas suffisante.

La syntaxe de la fonction calloc() est donnée ci-dessous :

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

Voyons l'exemple de la fonction 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)>

fonction realloc() en C

Si la mémoire n'est pas suffisante pour malloc() ou calloc(), vous pouvez réallouer la mémoire par la fonction realloc(). Bref, cela change la taille de la mémoire.

chaîne de liste Java

Voyons la syntaxe de la fonction realloc().

 ptr=realloc(ptr, new-size) 

fonction free() en C

La mémoire occupée par les fonctions malloc() ou calloc() doit être libérée en appelant la fonction free(). Sinon, cela consommera de la mémoire jusqu'à la sortie du programme.

Voyons la syntaxe de la fonction free().

 free(ptr)