Вы находитесь на странице: 1из 5

COURS STRUCTURES

DE

DONNES

CHAPITRE : LES LISTES CHANES PARTIE 1: ALLOCATION DYNAMIQUE

Cours : Structures de Donnes

Chapitre 3: Les Listes Chanes

1 L'allocation d na!i"#$ d$ la !%!oi&$


1'1 Allocation (tati"#$ d$ la !%!oi&$ Chaque variable dans un programme occupe un certain nombre d'octets en mmoire. Jusqu'ici, la rservation de la mmoire s'est droule automatiquement par l'emploi des dclarations des donnes. Le nombre d'octets rserver tait dj connu pendant la compilation. Nous parlons alors de la dclaration statique des variables ou bien dclaration statique de la mmoire.

E)$!*l$: float ! "# rservation de $ octets #" "# rservation de % octet #" "# rservation de *( octets #" "# rservation de '(( octets #"

char C! int tab&%(()!

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!

Cours : Structures de Donnes

Chapitre 3: Les Listes Chanes

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.

Cours : Structures de Donnes

Chapitre 3: Les Listes Chanes

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,;.

Cours : Structures de Donnes

Chapitre 3: Les Listes Chanes

+ L$( Li(t$( C0a1n%$(


+'1 D%.inition( Eoir chapFlisteFchainee8part'.odt

Вам также может понравиться