Latest web development tutorials

Gestion de la mémoire C

Ce chapitre explique la gestion de la mémoire dynamique C. langage C pour l'attribution et la gestion de la mémoire fournit plusieurs fonctions. Ces fonctions peuvent être trouvées dans<stdlib.h> fichier d' en- tête.

序号函数和描述
1void *calloc(int num, int size);
该函数分配一个带有num个元素的数组,每个元素的大小为size字节。
2void free(void *address);
该函数释放 address 所指向的h内存块。
3void *malloc(int num);
该函数分配一个num字节的数组,并把它们进行初始化。
4void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到newsize

allocation de mémoire dynamique

Lors de la programmation, si vous savez à l'avance la taille du tableau, la définition de tableau plus facile. Par exemple, un tableau pour stocker les noms, pouvant accueillir jusqu'à 100 caractères, de sorte que vous pouvez définir le tableau, comme suit:

char name[100];

Toutefois, si vous ne savez pas à l'avance la longueur du texte à mémoriser, comme une description détaillée d'un sujet lié à votre magasin. Ici, nous avons besoin de définir un pointeur qui pointe vers un undefined taille de caractère savant de mémoire, puis le suivi d'allouer de la mémoire à la demande, comme suit:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

Le programme ci - dessus peut également utilisercalloc () pour écrire, il suffit de remplacer calloc malloc, comme indiqué ci - dessous:

calloc(200, sizeof(char));

Lorsque l'allocation dynamique de la mémoire, vous avez un contrôle complet sur la taille de toute valeur peut être transmise. Ceux de taille prédéfinie tableau, la taille ne peut pas être changé une fois qu'il est défini.

Re-ajuster la taille de la mémoire et de la mémoire libre

Lorsque le programme se termine, le système d'exploitation libère automatiquement toute la mémoire allouée au programme, cependant, vous recommandons de ne pas besoin de mémoire, vous devez appeler la fonctionfree () pour libérer la mémoire.

Alternativement, vous pouvez appeler la fonctionrealloc () pour augmenter ou diminuer la taille du bloc de mémoire allouée.Nous allons utiliser realloc () et free () fonction, regardez à nouveau à l'exemple ci-dessus:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student.");
   }
   /* 假设您想要存储更大的描述信息 */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* 使用 free() 函数释放内存 */
   free(description);
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

Vous ne pouvez pas essayer de ré-allouer de la mémoire supplémentaire, strcat () génère une erreur en raison de l'insuffisance de description stockée la mémoire disponible.