SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
Langage C
Allocation dynamique de mémoire
François Cuvelier
Laboratoire d'Analyse Géométrie et Applications
Institut Galilée
Université Paris XIII.
16 novembre 2012
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 1 / 13
Plan
1 Introduction
2 Fonction malloc()
3 Fonction calloc()
4 Fonction free()
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 2 / 13
Introduction
L'allocation dynamique de mémoire permet en cours d'éxécution d'un
programme de réserver un espace mémoire dont la taille n'est pas
nécessairement connue lors de la compilation.
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 3 / 13
Introduction
L'allocation dynamique de mémoire permet en cours d'éxécution d'un
programme de réserver un espace mémoire dont la taille n'est pas
nécessairement connue lors de la compilation.
L'allocation dynamique est réalisée par les fonctions malloc() et calloc ().
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 3 / 13
Plan
1 Introduction
2 Fonction malloc()
3 Fonction calloc()
4 Fonction free()
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 4 / 13
Fonction malloc()
Prototype
void * malloc ( size_t t );
Description
permet de réserver (si possible) un bloc de taille t (en bytes) et renvoie
un pointeur vers l'adresse du bloc alloué s'il y a susament de
mémoire disponible
la valeur NULL en cas d'erreur.
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 5 / 13
Fonction malloc() : Exemple 1
Code
1 int ∗ pi ,n;
2 printf (n= ); scanf (%d,n);
3 pi= ( int ∗)malloc(n∗ sizeof( int ));
Description
La fonction malloc alloue (si possible) un bloc de n int et retourne
l'adresse (non typée, void ∗) du bloc.
On eectue alors une conversion de type : void ∗ vers int ∗.
Attention, aucun test si la fonction retourne la valeur NULL.
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 6 / 13
Fonction malloc() : Exemple 2
Code
1 pi= ( int ∗)malloc(n∗ sizeof( int ));
2 if ( pi == NULL ){
3 fprintf ( stderr ,
4 Allocation impossible : fichier %s, ligne %dn ,
5 __FILE__,__LINE__−2);
6 exit (EXIT_FAILURE);
7 }
Description
En cas d'erreur d'allocation, le programme ache un message d'erreur et
se termine!
On utilise ici des constantes du préprocesseur :
__FILE__ : ache le nom du chier source.
__LINE__ : ache le numéro de la ligne atteinte
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 7 / 13
Plan
1 Introduction
2 Fonction malloc()
3 Fonction calloc()
4 Fonction free()
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 8 / 13
Fonction calloc ()
Prototype
void * calloc(size_t n, size_t t);
Description
permet de réserver (si possible) n blocs de taille t (en bytes) et renvoie
un pointeur vers l'adresse du bloc alloué s'il y a susament de
mémoire disponible
la valeur NULL en cas d'erreur.
les blocs alloués sont tous mis à 0 (contrairement à la fonction
malloc() où la mémoire est non initialisée : donc aléatoire)
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 9 / 13
Fonction calloc () : Exemple 1
Code
1 int ∗ pi ,n;
2 printf (n= ); scanf (%d,n);
3 pi= ( int ∗) calloc (n, sizeof( int ));
Description
La fonction calloc alloue (si possible) un bloc de n int et retourne l'adresse
(non typée, void ∗) du bloc.
On eectue alors une conversion de type : void ∗ vers int ∗.
De plus, chaque bloc contient la valeur 0.
Attention, aucun test si la fonction retourne la valeur NULL.
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 10 / 13
Plan
1 Introduction
2 Fonction malloc()
3 Fonction calloc()
4 Fonction free()
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 11 / 13
Fonction free ()
Prototype
void free(void *);
Description
permet de libérer de la mémoire préalablement allouée par les fonctions
malloc() ou calloc ().
En paramètre, on passe l'adresse du bloc mémoire à désallouer.
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 12 / 13
Fonction free () - Exemple
Code
1 #include stdlib .h
2 #include stdio .h
3
4 void main(){
5 int ∗ pi ,n, i ;
6 printf (n= ); scanf (%d,n);
7 pi= ( int ∗)malloc(n∗ sizeof( int ));
8 if ( pi == NULL ){
9 fprintf ( stderr ,
10 Allocation impossible : fichier %s, ligne %dn ,
11 __FILE__,__LINE__−4);
12 exit (EXIT_FAILURE);
13 }
14 for ( i=0;in; i++) pi [ i]=2∗ i ;
15 for ( i=0;in; i++) printf (pi[%d]=%dn ,i , pi [ i ]);
16 free ( pi );
17 }
Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 13 / 13

Contenu connexe

Similaire à TableauxDynamiques.pdf

Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
ISIG
 

Similaire à TableauxDynamiques.pdf (20)

Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appel
 
C++11
C++11C++11
C++11
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Chapitre 9 - Les fonctions.pdf
Chapitre 9 - Les fonctions.pdfChapitre 9 - Les fonctions.pdf
Chapitre 9 - Les fonctions.pdf
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)Formation POO & Java (2ème séance)
Formation POO & Java (2ème séance)
 
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptxESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
 
Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4Cours de C++, en français, 2002 - Cours 2.4
Cours de C++, en français, 2002 - Cours 2.4
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Theme 6
Theme 6Theme 6
Theme 6
 

TableauxDynamiques.pdf

  • 1. Langage C Allocation dynamique de mémoire François Cuvelier Laboratoire d'Analyse Géométrie et Applications Institut Galilée Université Paris XIII. 16 novembre 2012 Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 1 / 13
  • 2. Plan 1 Introduction 2 Fonction malloc() 3 Fonction calloc() 4 Fonction free() Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 2 / 13
  • 3. Introduction L'allocation dynamique de mémoire permet en cours d'éxécution d'un programme de réserver un espace mémoire dont la taille n'est pas nécessairement connue lors de la compilation. Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 3 / 13
  • 4. Introduction L'allocation dynamique de mémoire permet en cours d'éxécution d'un programme de réserver un espace mémoire dont la taille n'est pas nécessairement connue lors de la compilation. L'allocation dynamique est réalisée par les fonctions malloc() et calloc (). Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 3 / 13
  • 5. Plan 1 Introduction 2 Fonction malloc() 3 Fonction calloc() 4 Fonction free() Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 4 / 13
  • 6. Fonction malloc() Prototype void * malloc ( size_t t ); Description permet de réserver (si possible) un bloc de taille t (en bytes) et renvoie un pointeur vers l'adresse du bloc alloué s'il y a susament de mémoire disponible la valeur NULL en cas d'erreur. Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 5 / 13
  • 7. Fonction malloc() : Exemple 1 Code 1 int ∗ pi ,n; 2 printf (n= ); scanf (%d,n); 3 pi= ( int ∗)malloc(n∗ sizeof( int )); Description La fonction malloc alloue (si possible) un bloc de n int et retourne l'adresse (non typée, void ∗) du bloc. On eectue alors une conversion de type : void ∗ vers int ∗. Attention, aucun test si la fonction retourne la valeur NULL. Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 6 / 13
  • 8. Fonction malloc() : Exemple 2 Code 1 pi= ( int ∗)malloc(n∗ sizeof( int )); 2 if ( pi == NULL ){ 3 fprintf ( stderr , 4 Allocation impossible : fichier %s, ligne %dn , 5 __FILE__,__LINE__−2); 6 exit (EXIT_FAILURE); 7 } Description En cas d'erreur d'allocation, le programme ache un message d'erreur et se termine! On utilise ici des constantes du préprocesseur : __FILE__ : ache le nom du chier source. __LINE__ : ache le numéro de la ligne atteinte Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 7 / 13
  • 9. Plan 1 Introduction 2 Fonction malloc() 3 Fonction calloc() 4 Fonction free() Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 8 / 13
  • 10. Fonction calloc () Prototype void * calloc(size_t n, size_t t); Description permet de réserver (si possible) n blocs de taille t (en bytes) et renvoie un pointeur vers l'adresse du bloc alloué s'il y a susament de mémoire disponible la valeur NULL en cas d'erreur. les blocs alloués sont tous mis à 0 (contrairement à la fonction malloc() où la mémoire est non initialisée : donc aléatoire) Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 9 / 13
  • 11. Fonction calloc () : Exemple 1 Code 1 int ∗ pi ,n; 2 printf (n= ); scanf (%d,n); 3 pi= ( int ∗) calloc (n, sizeof( int )); Description La fonction calloc alloue (si possible) un bloc de n int et retourne l'adresse (non typée, void ∗) du bloc. On eectue alors une conversion de type : void ∗ vers int ∗. De plus, chaque bloc contient la valeur 0. Attention, aucun test si la fonction retourne la valeur NULL. Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 10 / 13
  • 12. Plan 1 Introduction 2 Fonction malloc() 3 Fonction calloc() 4 Fonction free() Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 11 / 13
  • 13. Fonction free () Prototype void free(void *); Description permet de libérer de la mémoire préalablement allouée par les fonctions malloc() ou calloc (). En paramètre, on passe l'adresse du bloc mémoire à désallouer. Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 12 / 13
  • 14. Fonction free () - Exemple Code 1 #include stdlib .h 2 #include stdio .h 3 4 void main(){ 5 int ∗ pi ,n, i ; 6 printf (n= ); scanf (%d,n); 7 pi= ( int ∗)malloc(n∗ sizeof( int )); 8 if ( pi == NULL ){ 9 fprintf ( stderr , 10 Allocation impossible : fichier %s, ligne %dn , 11 __FILE__,__LINE__−4); 12 exit (EXIT_FAILURE); 13 } 14 for ( i=0;in; i++) pi [ i]=2∗ i ; 15 for ( i=0;in; i++) printf (pi[%d]=%dn ,i , pi [ i ]); 16 free ( pi ); 17 } Cuvelier F. (FSIMACS) Langage C 16 novembre 2012 13 / 13