Académique Documents
Professionnel Documents
Culture Documents
Chapitre 4
L’allocation dynamique de la mémoire
Exemples :
1
24/05/2018
Exemples :
Cas des pointeur (p= 2 ou 4 suivant la machine)
Allocation dynamique :
Problématique :
Information reçue ou modifiée lors de l’exécution du programme
Solution statique :
Prévoir un espace plus grand Gaspillage de la mémoire
Exemple :
Les tableaux sont toujours déclarés avec une dimension maximale.
Solution :
Gérer la mémoire lors de l’exécution = ALLOCATION DYNAMIQUE
2
24/05/2018
La fonction : malloc
void *malloc(Nombre_Octets)
Description :
- Allouer un espace mémoire
- Retourner un pointeur sur l’espace alloué
Paramètres :
- Nombre_Octets: Taille du block mémoire en
Octets
La fonction : malloc
void *malloc(Nombre_Octets)
Valeur de retour :
- Pointeur non-typé : void *
Si l’allocation réussi
- Pointeur : NULL
Sinon
Remarque :
NULL est défini dans les fichiers d'en-tête <stddef.h>
et <stdlib.h> de la bibliothèque standard du C, et est
un cast de 0 en void *
3
24/05/2018
La fonction : free
Description :
Libérer un emplacement préalablement alloué par une fonction
d’allocation (malloc, calloc ou realloc)
-
Paramètres :
- ptr : Pointeur sur le block mémoire alloué auparavant.
4
24/05/2018
La fonction : calloc
calloc ∈ <stdlib.h>
Syntaxe :
void *calloc(NBR_ELM , TAILLE_ELM)
Description :
- Même chose que malloc mais elle initialise en
plus l’objet pointé à 0
int N, *p ;
int N, *p ; ...................
................... p = (int*)malloc(N * sizeof(int));
p = (int*)calloc(N,sizeof(int)); for (i = 0; i < N; i++)
*(p + i) = 0;
Allocation statique
int T[100] ;
5
24/05/2018
La fonction : realloc
void *realloc(void *ptr, NV_TAILLE)
realloc ∈ <stdlib.h>
Description :
Modifier la taille d’une zone préalablement allouée (par malloc,
calloc ou realloc).
Paramètres :
- ptr : Pointeur sur le block mémoire alloué auparavant.
- NV_TAILLE : la nouvelle taille souhaitée en octet.
Valeur de retoure :
- Un pointeur sur le nouveau espace alloué Si OK
- NULL Sinon
Exemple « realloc » :
6
24/05/2018
Exercice 1 :
Exercice 2 :
On considère le type structure suivant :
typedef struct {
char *nom;
int age ;
float taille ;
} Personne ;