Comment libérer de la mémoire avec la fonction malloc () dans la programmation de c

Voici un secret: Déclarer une variable dans la programmation C est en réalité la direction du programme pour mendier un peu d'espace de stockage à partir du système d'exploitation. Comme vous le savez (espérons-le, vous savez), le système d'exploitation est le Seigneur Haut Maître de l'ordinateur ou tout autre appareil électronique vous programmez. En tant que tel, il distribue des RAM aux programmes qui le demandent.

Sommaire

Lorsque vous déclarez une variable, d'un int court humbles à un tampon de chaîne massif, vous diriger le programme à mendier pour que beaucoup d'espace, dans lequel vous prévoyez de mettre quelque chose d'utile. Dans le langage C, vous pouvez également allouer de la mémoire à la volée, aussi longtemps que vous avez une armée de pointeurs à portée de main pour enregistrer les adresses.

Notions de base de la malloc () fonction

La fonction malloc () existe pour assouvir les envies de mémoire de votre programme. Donnez-lui un pointeur, et malloc () alloue de la mémoire (l'obtenir?) Dans une taille donnée pour stocker un certain type de variable. Voici le format:

p = (type *) malloc (taille) -

type est un transtypage, diriger malloc () pour allouer un bloc de mémoire dimensionné pour stocker la bonne quantité d'informations pour le type de variable donné.

taille est la quantité de stockage qui est nécessaire. Il est mesuré en octets, mais vous devez être attentifs à allouer suffisamment de stockage pour accueillir le type de variable. Par exemple, si vous avez besoin d'espace pour stocker une valeur int, vous devez créer suffisamment d'espace de stockage dans lequel une valeur int convient. Ce nombre d'octets est traditionnellement calculé en utilisant l'opérateur sizeof.

La fonction malloc () renvoie l'adresse du bloc de mémoire qui est affectée. L'adresse est stockée dans pointeur p, qui doit correspondre au type de variable. Quand la mémoire ne peut pas être attribué, une valeur NULL est renvoyée.

Vous devez vérifier la valeur NULL avant d'utiliser la mémoire allouée! Si vous ne le faites pas, votre programme se réunira avec un péril certain.

Enfin, vous devez inclure le fichier d'en-tête stdlib.h dans votre code source pour maintenir le compilateur heureux avec la fonction malloc (). Donnez-moi de l'espace montre un exemple.

GIVE ME ESPACE




#include #include int main () {int * âge-age = (int *) malloc (sizeof (int) * 1) -Si (âge == NULL) {puts ("Impossible d'allouer de la mémoire») - la sortie (1 ) -} printf ("Quel âge avez-vous?") -scanf ("% d", l'âge) -printf ("Vous êtes% d ans vieille n"., * âge) -retour (0) -}

La première chose à noter à propos de Give Me Space est que la seule variable déclarée est un pointeur, de l'âge. Une variable d'int est pas défini, même si le programme accepte int entrée et affiche INT Sortie.

Ligne 8 utilise malloc () de mettre de côté un stockage d'un nombre entier. Pour veiller à ce que la bonne quantité de stockage est alloué, l'opérateur sizeof est utilisé. Pour allouer de l'espace pour une nombre entier, la valeur 1 est multiplié par le résultat de l'sizeof (int) fonctionnement. (Ce processus est nécessaire à ce stade, mais il arrive en jeu plus tard.) L'adresse de ce stockage est enregistré dans le pointeur d'âge.

Ligne 9 tests pour veiller à ce que malloc () a été en mesure d'allouer de la mémoire. Sinon, la valeur retournée est NULL (ce qui est une constante définie dans stdlib.h), et le programme affiche un message d'erreur (voir ligne 11) et se ferme (voir la ligne 12).

Vous remarquerez que la fonction scanf () à la ligne 15 ne pas utiliser le préfixe. Voilà parce que le âge variable est une adresse de mémoire - il est un pointeur! Vous ne devez pas la dans ce cas (comme vous ne l'avez pas besoin pour une chaîne lue par la fonction scanf ()).

Enfin, la notation Peeker est utilisé dans 16 la ligne en affichant la valeur d'entrée.

Exercice 1: Lancez un nouveau projet en utilisant le code source de Give Me espace. Construire et exécuter.

Exercice 2: Utilisation Give Me espace comme votre inspiration, écrire un programme qui demande la température actuelle à l'extérieur comme une valeur en virgule flottante. Avoir le code se demander si la saisie est Celsius ou Fahrenheit. Utilisation malloc () pour créer le stockage de l'entrée de valeur. Affichage de la température résultant en Kelvin. Voici les formules:

Kelvin = Celsius + 273,15 =-kelvin (Fahrenheit 459,67 +) * (5.0 / 9.0) -

ExercISE 3: Écrire un programme qui alloue de l'espace pour trois valeurs int - un tableau. Vous devez utiliser une seule fonction malloc () pour accomplir cette tâche. Affecter 100, 200, et 300 à chaque int, puis afficher les trois valeurs.

Comment créer de stockage de chaîne

La fonction malloc () est couramment utilisé pour créer un tampon d'entrée. Cette technique évite de déclarer et de dimensionnement un tableau vide. Par exemple, la notation

entrée char [64] -

peut être remplacée par cette déclaration:

char * entrées-

La taille de la mémoire tampon est établi dans le code en utilisant la fonction malloc () .En Allouer un tampon d'entrée, la fonction malloc () à la ligne 8 déclare un tableau de caractères - un tampon de stockage - pour environ 1024 octets. Ok, il est un kilo-octet (Ko).

L'allocation d'un tampon d'entrée

#include #include int main () {char * entrée-entrée = (char *) malloc (sizeof (char) * 1024) -Si (entrée == NULL) {puts ("Impossible d'allouer un tampon! Oh non!") -exit (1) -} puts ("Type quelque chose de long et ennuyeux:") - fgets (entrée, 1023, stdin) -puts ("Vous avez écrit:") - printf (""% s " n", entrée) -retour (0) -}

Le reste du code accepte l'entrée et affiche ensuite la sortie. La fonction fgets () à la ligne 15 limites de l'entrée 1023 octets, laissant la place reste pour le 0 à la fin de la chaîne.

Exercice 4: Fouetter jusqu'à un nouveau projet en utilisant le code source d'allouer un tampon d'entrée.

Exercice 5: Modifier le code source d'allouer un tampon d'entrée. Créer un deuxième tampon char en utilisant un pointeur et malloc (). Après texte est lu par les fgets function (), copier le texte à partir de la première mémoire tampon (entrée dans l'attribution d'un tampon d'entrée) dans le deuxième tampon - tout le texte à l'exception du caractère de nouvelle ligne, n, à la fin de l'entrée.

Exercice 6: La modification du code source à partir de l'exercice 5 de sorte que le deuxième tampon contient une version du texte dans la première mémoire tampon où toutes les voyelles ont été remplacés par à-signes (@).


» » » » Comment libérer de la mémoire avec la fonction malloc () dans la programmation de c