Vous êtes sur la page 1sur 7

24/05/2018

M.YANDOUZI - ENSAO 2017/2018 111

Chapitre 4
L’allocation dynamique de la mémoire

M.YANDOUZI - ENSAO 2017/2018 112

Déclaration statique de données :

Déclaration statique des variables


Réservation automatique de la mémoire

Exemples :

float A, B, C; /* réservation de 12 octets */

short D[10][20]; /* réservation de 400 octets */

char E[] = "Bonjour !"; /* réservation de 10 octets */

char F[][10] = {"un", "deux", "trois", "quatre"};


/* réservation de 40 octets */

1
24/05/2018

M.YANDOUZI - ENSAO 2017/2018 113

Déclaration statique de données :

Exemples :
Cas des pointeur (p= 2 ou 4 suivant la machine)

double *G; /* réservation de p octets */

float *I[10]; /* réservation de 10*p octets */

char *J = "Bonjour !"; /* réservation de p+10 octets */

char *K[] = {"un", "deux", "trois", "quatre"};


/* réservation de 4*p+3+5+6+7 octets */

M.YANDOUZI - ENSAO 2017/2018 114

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

M.YANDOUZI - ENSAO 2017/2018 115

La fonction : malloc

malloc ∈ <stdlib.h> = les fonctions de base du langage C


(Conversion de nombres, gestion de la mémoire…)
Syntaxe :

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

M.YANDOUZI - ENSAO 2017/2018 116

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

M.YANDOUZI - ENSAO 2017/2018 117

La fonction : free

void free (void * ptr)


free ∈ <stdlib.h>

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.

M.YANDOUZI - ENSAO 2017/2018 118

Exemple : malloc, free et NULL

4
24/05/2018

M.YANDOUZI - ENSAO 2017/2018 119

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;

M.YANDOUZI - ENSAO 2017/2018 120

Exemple « calloc » : Lecture et affichage d’un tableau

Allocation statique
int T[100] ;

5
24/05/2018

M.YANDOUZI - ENSAO 2017/2018 121

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

M.YANDOUZI - ENSAO 2017/2018 122

Exemple « realloc » :

6
24/05/2018

M.YANDOUZI - ENSAO 2017/2018 123

Exercice 1 :

Ecrire la fonction ALLOUE_MATRICE


qui alloue l’espace mémoire pour
une matrice d’entiers et qui
initialise ses valeurs à VAL :

int * ALLOUE_MATRICE (int , int , int)

M.YANDOUZI - ENSAO 2017/2018 124

Exercice 2 :
On considère le type structure suivant :
typedef struct {
char *nom;
int age ;
float taille ;
} Personne ;

Donner le code des fonctions suivantes :


Personne * Creer_personne ( char *NOM, int
AGE, float TAILLE )
void Affiche_personne ( Personne *w)
void Detruire_personne ( Personne *w)

Vous aimerez peut-être aussi