• Aucun résultat trouvé

Langage C Allocation dynamique de mémoire François Cuvelier

N/A
N/A
Protected

Academic year: 2022

Partager "Langage C Allocation dynamique de mémoire François Cuvelier"

Copied!
14
0
0

Texte intégral

(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

(2)

Plan

1

Introduction

2

Fonction malloc()

3

Fonction calloc()

4

Fonction free()

(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.

(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 ().

(5)

Plan

1

Introduction

2

Fonction malloc()

3

Fonction calloc()

4

Fonction free()

(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.

(7)

Fonction malloc() : Exemple 1

Code

1

i n t ∗ pi , n ;

2

p r i n t f ( "n=" ) ; s c a n f ( "%d" ,&n ) ;

3

p i= ( i n t ∗ ) malloc ( n ∗ s i z e o f ( i n t ) ) ;

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.

(8)

Fonction malloc() : Exemple 2

Code

1

p i= ( i n t ∗ ) malloc ( n ∗ s i z e o f ( i n t ) ) ;

2

i f ( p i == NULL ){

3

f p r i n t f ( s t d e r r ,

4

"Allocation impossible : fichier %s, ligne %d\n" ,

5

__FILE__,__LINE__ − 2);

6

e x i t (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

(9)

Plan

1

Introduction

2

Fonction malloc()

3

Fonction calloc()

4

Fonction free()

(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)

(11)

Fonction calloc () : Exemple 1

Code

1

i n t ∗ pi , n ;

2

p r i n t f ( "n=" ) ; s c a n f ( "%d" ,&n ) ;

3

p i= ( i n t ∗ ) c a l l o c ( n , s i z e o f ( i n t ) ) ;

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.

(12)

Plan

1

Introduction

2

Fonction malloc()

3

Fonction calloc()

4

Fonction free()

(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.

(14)

Fonction free () - Exemple

Code

1

#i n c l u d e < s t d l i b . h>

2

#include <s t d i o . h>

3

4

void main ( ) {

5

i n t ∗ pi , n , i ;

6

p r i n t f ( "n=" ) ; s c a n f ( "%d" ,&n ) ;

7

p i= ( i n t ∗ ) malloc ( n ∗ s i z e o f ( i n t ) ) ;

8

i f ( p i == NULL ){

9

f p r i n t f ( s t d e r r ,

10

"Allocation impossible : fichier %s, ligne %d\n" ,

11

__FILE__,__LINE__ − 4);

12

e x i t (EXIT_FAILURE ) ;

13

}

14

f o r ( i =0; i <n ; i ++) p i [ i ]=2 ∗ i ;

15

f o r ( i =0; i <n ; i ++) p r i n t f ( "pi[%d]=%d\n" , i , p i [ i ] ) ;

16

f r e e ( p i ) ;

17

}

Références

Documents relatifs

Adapter la fonction de création pour créer une liste linéaire chaînée dans l'ordre FIFO à partir de ce fichier binaire.. Exercice 2 : Supposons que les données

Nous avons également vu que dans le domaine de l’embarqué contraint, le code de l’application cible peut être exécutée directement en place dans la mémoire de stockage,

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

- Le pointeur « ptr » contient l’adresse mémoire d’une zone mémoire capable de contenir une variable de type « int ».. - La définition d’un pointeur n’alloue en

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

p tend à diminuer la longueur r de la normale nous aurons pour déterminer le mouvement du corps flottant , l’équation. dans laquelle les intégrales indiquées par la

Pour libérer de la mémoire allouée dynamiquement en C++, on utilisera l’opérateur delete...

qui nous met personnellement en jeu. Les données matérielles de l'expérience appellent toujours ce même coefficient d'intégration qui définit à la fois la