Академический Документы
Профессиональный Документы
Культура Документы
DE
DONNES
E)$!*l$: float ! "# rservation de $ octets #" "# rservation de % octet #" "# rservation de *( octets #" "# rservation de '(( octets #"
char nom&'()!
1'+ Allocation d na!i"#$ d$ la !%!oi&$ +ouvent, nous devons travailler avec des donnes dont nous ne pouvons pas prvoir le nombre et la grandeur lors de la programmation. Ce serait alors un gaspillage de rserver toujours l'espace ma,imal prvisible. -l nous faut donc un mo.en de grer la mmoire lors de l'e,cution du programme. /,emple Nous voulons lire n entiers au clavier et mmoriser les valeurs dans un tableau d'entiers. n est un entier qui sera saisie au clavier. 0ne solution possible est la suivante1 nous dclarons un tableau de grande taille, e,emple1 int tab &%(()! int n!
2n saisie par la suite n, qui doit 3tre infrieur %((. 4robl5me %1 et si on a besoin de %(% cases 6 4robl5me '1 et on va utiliser uniquement 7 cases 6 +olution1 faire la rservation de la mmoire apr5s la saisie de n, c88d pendant l'e,cution du programme. Nous parlons dans ce cas de l'allocation d.namique de la mmoire. 1'+'1 ,onction (i-$o. si9eof :t.pe; 1fournit la taille en octets pour une variable du t.pe <t.pe=. Exemple: si9eof:float; "# retourne $1 taille en octets d'une variable float #" si9eof:char; "# retourne %1 taille en octets d'une variable char #" 1'+'+ ,onction !alloc La fonction malloc, de
la
biblioth5que
<stdlib.h=,
permet
la
rservation d'un espace mmoire pendant l'e,cution du programme. malloc prend un seul param5tre1 le nombre d'octets reserver. /lle rtourne l'adresse du premier bloc mmoire allou. +'il n'. a pas asse9 d'espace mmoire, aucun espace mmoire ne sera allou et la fonction retourne N0LL. Exemple 1: int #tab! int n > ?! tab > :int #; malloc:si9eof:int; # n;! if :tab >> N0LL;@ printf:A/checA;! Belse@ "# le tableau est bien allouer #" B Exercice saisir un tableau de rel.
1'+'/ ,onction .&$$ +i nous n'avons plus besoin d'un bloc de mmoire que nous avons rserv l'aide de malloc, alors nous pouvons le librer l'aide de la fonction free de la biblioth5que <stdlib.h=. free: <4ointeur= ;!
Cemarques La fonction free peut aboutir un dsastre si on essaie de librer de la mmoire qui n'a pas t alloue par malloc. La fonction free n'a pas d'effet si le pointeur a la valeur N0LL. +i nous ne librons pas e,plicitement la mmoire l'aide free, alors elle est libre automatiquement la fin du programme. /,ercice Dclarer une structure 2rdinateur1 ram:entier;, frquence:rel;, taille disque dur:entier;. Dclarer un pointeur, p, sur 2rdinateur. 0tiliser p pour saisir et afficher un 2rdinateur. :dans le programme on va dclarer uniquement p;. 2ption1 sacoche :couleur, marque, pri,;.