Gestion de la mémoire C
Ce chapitre expliquera la gestion dynamique de la mémoire en C. Le langage C fournit plusieurs fonctions d'allocation et de gestion de la mémoire. Ces fonctions se trouvent dans le fichier d'en-tête <stdlib.h>.
Numéro de série | Fonction et description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Cette fonction alloue un tableau avec numéléments, chaque élément La taille de esttaille octets. | ||||||||||
2 | void free(void *address); Cette fonction libère le bloc mémoire h pointé par adresse . | |||||||||
3 | void *malloc(int num); Cette fonction alloue un num tableaux d’octets et initialisez-les. | |||||||||
4 | void *realloc(void *address, int newsize); Cette fonction réalloue la mémoire et met de la mémoire s'étend ànewsize. |
Lors de la programmation, si vous connaissez la taille du tableau à l'avance, alors quand définir le tableau C'est plus simple. Par exemple, un tableau pour stocker les noms de personnes, il peut contenir jusqu'à 100 caractères, vous pouvez donc définir le tableau comme ceci :
char name[100];Cependant, si vous ne connaissez pas à l'avance la longueur du texte dont vous avez besoin à stocker, par exemple vous souhaitez stocker la description détaillée d'un sujet. Ici, nous devons définir un pointeur qui pointe vers un caractère avec une taille de mémoire non définie, puis allouer de la mémoire en fonction de la demande, comme indiqué ci-dessous :
#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 produira les résultats suivants :
Name = Zara AliDescription: Zara ali a DPS student in class 10thLe programme ci-dessus peut également être écrit en utilisant
calloc(200, sizeof(char));< 🎜>Lors de l'allocation dynamique de mémoire , vous avez un contrôle total et pouvez transmettre des valeurs de n'importe quelle taille. Les tableaux avec des tailles prédéfinies ne peuvent pas être modifiés en taille une fois définis. <🎜><🎜>Redimensionnez la mémoire et libérez de la mémoire<🎜><🎜>Lorsque le programme se termine, le système d'exploitation libérera automatiquement toute la mémoire allouée au programme. Cependant, il est recommandé de l'appeler chaque fois que vous ne le faites pas. besoin de mémoire. Fonction <🎜>free()<🎜> pour libérer de la mémoire. <🎜><🎜>Alternativement, vous pouvez augmenter ou diminuer la taille du bloc mémoire alloué en appelant la fonction <🎜>realloc()<🎜>. Regardons à nouveau l'exemple ci-dessus en utilisant les fonctions realloc() et free() : <🎜>
#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 AliDescription: Zara ali a DPS student.She is in class 10th<🎜>Vous pouvez si vous essayez sans réallouer de la mémoire supplémentaire, la fonction strcat() générera une erreur car la mémoire disponible est insuffisante pour stocker la description. <🎜><🎜>