8PRO100 - PowerPoint PPT Presentation

1 / 27
About This Presentation
Title:

8PRO100

Description:

calloc retourne un pointeur sur un espace m moire r serv un tableau de nobj objets, tous de taille s, ou bien NULL si cette demande ne peut pas tre satisfaite. ... – PowerPoint PPT presentation

Number of Views:26
Avg rating:3.0/5.0
Slides: 28
Provided by: wwwen4
Category:
Tags: 8pro100 | objets

less

Transcript and Presenter's Notes

Title: 8PRO100


1
8PRO100
Éléments de programmation
Allocation dynamique de la mémoire
2
Allocation statique et dynamique
Jusquà maintenant, toutes la mémoire que nous
avons utilisée dans nos programmes devait être
allouée avant l'exécution à laide des
déclarations de variables. Il est parfois utile
dallouer une partie de lespace mémoire en cours
dexécution.
3
Exemple 1
Par exemple si on a besoin de mémoriser un
certains nombre dobjets mais que ce nombre nest
pas connu avant lexécution du programme. Il
faut alors allouer suffisament despace au cas ou
le nombre dobjets soit grand. Si le nombre
dobjets est petits, on gaspille inutilement de
lespace mémoire.
4
Le fichier den-tête stdlib.h
Le fichier dentête stdlib.h contient des
déclarations de fonctions traitant, entre autres,
de lallocation de la mémoire - malloc -
free - calloc - realloc
5
void malloc(size_t s)
size_t est un type dentiers positifs. malloc
retourne un pointeur sur un espace mémoire
réservé à un objet de taille s, ou bien NULL si
cette demande ne peut être satisfaite. La mémoire
allouée nest pas initialisée.
6
Exemple 2
int p p 10 / INVALIDE puisque p ne pointe
sur / / aucune case mémoire valide
/ p (int) malloc(sizeof(int)) p
10 / VALIDE /
p
Avant malloc
p
Après malloc
7
Exemple 2
int p p 10 / INVALIDE puisque p ne pointe
sur / / aucune case mémoire valide
/ p (int) malloc(sizeof(int)) p
10 / VALIDE /
Pourquoi?
p
Avant malloc
p
Après malloc
8
Pointeurs sur void
La fonction malloc ne sait pas à quoi servira
lespace mémoire qui lui est demandée. Elle ne
sait pas quel type dobjet utilisera cet
espace. Alors, elle retourne un pointeur
générique qui peut être converti en ninporte
quel type de pointeur un pointeur sur void
9
Conversion implicite
En C, certaine conversion de type sont
implicite double x int n char c n
c / un char est converti en un int / c n
/ un int est converti en un char / x n
/ un int est converti en un double / n x
/ un double est converti en un int /
10
Conversion explicite
Dans toute expression, on peut forcer
explicitement des conversions de types grâce à un
opérateur unaire appelé cast. Dans la
construction (nom de type) expression lexpressio
n est convertie dans le type précisé (selon
certaines règles).
11
Exemple 3
printf(d, pow(2,3)) / mauvaise façon
/ printf(d, (int) pow(2,3)) / bonne façon
/
12
Exemple 4
int p struct complexe cplx p (int )
malloc(sizeof(int)) cplx (struct complexe )
malloc(sizeof(struct complexe))
13
void free(void p)
free libère lespace mémoire pointé par p elle
ne fait rien si p vaut NULL. p doit être un
pointeur sur un espace mémoire alloué par malloc,
calloc ou realloc.
14
void calloc(size_t nobj, size_t s)
calloc retourne un pointeur sur un espace mémoire
réservé à un tableau de nobj objets, tous de
taille s, ou bien NULL si cette demande ne peut
pas être satisfaite. La mémoire allouée est
initialisée par des zéros.
15
void realloc(void p, size_t s)
realloc change en s la taille de lobjet pointé
par p. Si la nouvelle taille est plus petite que
lancienne, seul le début du contenu de lobjet
est conservé. Si la nouvelle taille est plus
grande, le contenu de lobjet est conservé, et
lespace mémoire supplémentaire nest pas
initialisé. realloc retourne un pointeur sur un
nouvel espace mémoire, ou bien NULL si cette
demande ne peut pas être satisfaite, auquel cas
p nest pas modifié.
16
Exemple 5
On veut lire des entiers et les mettre en
mémoire. Plutôt que de créer un tableau avant
lexécution, on utilise calloc pendant
lexécution. int p, n scanf(d, n) p
(int ) calloc(n, sizeof(int)) si plus tard cet
espace nest plus suffisant, alors on utilise p
(int ) realloc(p, 2n)

p
17
Exemple 6
Liste chaînée struct Maillon int valeur
struct Maillon suivant typedef struct
Maillon maillon maillon chaine, p
chaine
p
18
Exemple 6
chaine (maillon) malloc(sizeof(maillon))
valeur
suivant
chaine
p
19
Exemple 6
chaine (maillon) malloc(sizeof(maillon)) chain
e -gt valeur 8
8
chaine
p
20
Exemple 6
chaine -gt suivant (maillon) malloc(sizeof(maill
on))
8
chaine
p
21
Exemple 6
p chaine -gt suivant
8
chaine
p
22
Exemple 6
p -gt valeur 5
8
5
chaine
p
23
Exemple 6
p -gt suivant (maillon) malloc(sizeof(maillon))
8
5
chaine
p
24
Exemple 6
p p -gt suivant
8
5
chaine
p
25
Exemple 6
p -gt valeur 13 p -gt suivant NULL
8
5
13
0
chaine
p
26
Exemple 6
p chaine while (p ! NULL) printf(d\n,
p-gtvaleur) p p-gtsuivant
8
5
13
0
chaine
p
27
Exemple 6
for (pchaine p!NULL pp-gtsuivant)
printf(d\n, p-gtvaleur)
8
5
13
0
chaine
p
Write a Comment
User Comments (0)
About PowerShow.com