0% ont trouvé ce document utile (0 vote)
53 vues5 pages

Gestion de malloc et free en C

Ce document décrit les fonctions malloc et free pour l'allocation et la désallocation dynamique de mémoire, ainsi que l'opérateur sizeof pour obtenir la taille d'un objet. Il fournit également un exemple d'allocation dynamique de mémoire pour une structure.

Transféré par

m-hand.ait-cherif.etu
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
53 vues5 pages

Gestion de malloc et free en C

Ce document décrit les fonctions malloc et free pour l'allocation et la désallocation dynamique de mémoire, ainsi que l'opérateur sizeof pour obtenir la taille d'un objet. Il fournit également un exemple d'allocation dynamique de mémoire pour une structure.

Transféré par

m-hand.ait-cherif.etu
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Allocation dynamique

Plan

Allocation dynamique

1/5
Allocation dynamique

malloc et free
Ces fonctions nécessitent l’inclusion de l’entête stdlib.h et
manipulent un segment de mémoire — appelé le tas — associé au
processus.
Fonction d’allocation dynamique de mémoire :
• fonction malloc de la librairie standard ;
• réserve un espace mémoire dans le tas du processus ;
• void *malloc(size t size)
réserve size octets dans le tas et retourne un pointeur sur la
zone allouée (NULL en cas d’echec).
Fonction de désallocation de mémoire ;
• fonction free de la librairie standard ;
• void free(void *ptr)
libère une zone allouée par un précédent malloc.
ptr doit obligatoirement être un pointeur retourné par un
précédent malloc.
2/5
Allocation dynamique

Conversion de type

Petit rappel sur le forçage de type : coercition (cast)


• force la conversion de type de la valeur d’un expression :
( type ) expression
• ne peut être une valeur gauche.
Petit rappel sur la taille d’un objet : opérateur sizeof
• sizeof(identificateur de type)
donne la taille en octets de tout objet de type
identificateur de type ;

3/5
Allocation dynamique

Conversion de type
Petit rappel sur le forçage de type : coercition (cast)
• force la conversion de type de la valeur d’un expression :
( type ) expression
• ne peut être une valeur gauche.
Petit rappel sur la taille d’un objet : opérateur sizeof
• Avec beaucoup de précaution, on peut utiliser
sizeof (expression)
qui donne la taille en octets de son opérande expression.
sizeof(expression) est équivalent à
sizeof(type de l’expression) :
void foo ( char * ptr / * ou c h a r p t r [ ] * / ) { 1
putdec ( sizeof ( ptr ) ) ; / * e q u i v : s i z e o f ( c h a r * ) * / 2
} 3
int main ( void ) { 4
char txt [ 3 2 ] = ” Bonjour ! ” ; 5
putdec ( sizeof ( txt ) ) ; / * e q u i v : s i z e o f ( c h a r [ 3 2 ] ) ; * /6
foo ( txt ) ; 7
} 8 4/5
Allocation dynamique

Exemple lors de l’allocation dynamique :


# include < s t d l i b . h> 1
struct point { int x , y ; } ; 2
3
struct point * reserve_n_points ( int n ) { 4
return 5
( struct point * ) 6
malloc ( n * sizeof ( struct point ) ) ; 7
} 8
9
int main ( void ) { 10
struct point * p_point = reserve_n_points ( 1 0 ) ; 11
return 0 ; 12
} 13

Attention : l’espace mémoire alloué dynamiquement sur — le tas


— dans une fonction n’est pas détruit en fin de fonction comme
l’espace associé à une variable automatique (locale).

5/5

Vous aimerez peut-être aussi