Sunteți pe pagina 1din 27

Analyse et programmation 2

Les pointeurs et lallocation dynamique de mmoire

Thmes abords
Complments sur les pointeurs
Rappels Dclaration de types pointeurs Oprateurs Les pointeurs et les tableaux Recommandations Principes. Allocation et libration. Variables simples, tableaux, structures. Allocation dynamique et transtypage de pointeurs. Les fuites de mmoire. Quelques fonctions de manipulation de mmoire
1

Allocation dynamique de mmoire

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Dfinition - Rappel

Un pointeur
Cest une ne variable ariable o ou une ne constante constante. Dsignant lemplacement dune variable en mmoire. Cest un nombre entier contenant ladresse de la variable. Le pointeur dsigne ou pointe sur la variable.

A010
int i, j, k; int* pi = &i; // pi contient A000 int** ppi = π // ppi contient A00C

A00C A008 A004 A000

ppi pi k j i
2

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Dclaration

Forme gnrale type* var; Dclarations combines int i, j, k, * pi, ** ppi; Un pointeur peut pointer
Simple Si l : i int, l long, d double, bl Compos : tableau, struct, union. Pointeur. i, j, k : de type int pi de type int* ppi de type int**

Une variable ou constante de nimporte quel type de donnes

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Reprsentation en mmoire Un pointeur est un entier.
Contenant ladresse de la variable pointe. p Sa taille dpend du microprocesseur.

Comment varie la taille en mmoire dun pointeur en fonction du type point ?


char * pchar; int * pint; double * pdouble; printf("pchar:%d\n", i tf(" h %d\ " sizeof(pchar)); i f( h )) printf("pint:%d\n", sizeof(pint)); printf("pdouble:%d\n", sizeof(pdouble)); Sur PC sous Win32 : toujours 32 bits. Sur PC sous Win64 : toujours 64 bits.
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 4

Les pointeurs
Oprateurs de base Rcupration dadresse
Rappel pp :

& plac devant une variable renvoie son adresse. Drfrencement


loprateur

Rappel :
loprateur pointe.

* plac devant un pointeur permet de dsigner la variable

Quel est leffet de :


int i, *pi; pi = &i &i; i = 1; *pi = 2; *&i = 3; pi = 4; *pi = 5;

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Somme dun pointeur et dun entier Somme dun pointeur et dun entier
Lorsquon ajoute 1 un pointeur, cela augmente la valeur de ladresse quil il contient ti t non pas d de 1 1, mais i d de l la t taille ill dun d l lment t point i t. Intrt :
Si un pointeur pointe au dbut dun tableau. Ajouter 1 fait pointer sur llment suivant.

A010 A008 A004 A000

Exemple
int tab[4] = {0, 10, 20, 30}; int* t; t = &tab[0]; printf("%d\n", t = t + 1; printf("%d\n", t = t + 1; printf("%d\n", t = t + 1; printf("%d\n", *t); *t); *t); *t);

A00C

t tab[3] tab[2] tab[1] tab[0]

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Somme dun pointeur et dun entier A00C A00C A008 A004 A000 pi = &i; printf("pi pi = pi + 1; printf("pi+1 printf( pi+1 px = &x; printf("px px = px + 1; printf("px+1 :%d\n", pi); :%d\n" :%d\n , pi); :%d\n", px); :%d\n", px);
7

px x pi i

Exemple
int i, *pi; double x, *px;

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Somme dun pointeur et dun entier

Somme dun pointeur et dun entier


Lorsquon Lorsqu on ajoute n un pointeur, pointeur cela augmente la valeur de ladresse de n fois la taille dun lment point. Si le pointeur pointe vers un tableau, il pointe ensuite sur llment situ n lments plus loin

Diffrence dun pointeur et dun entier


Fonctionne comme la somme, mais soustrait le dcalage.

Oprateurs combins
+= -=

Oprateurs dincrmentation et de dcrmentation


++ : le pointeur pointe sur llment suivant. -- : le pointeur pointe sur llment prcdent.
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 8

Les pointeurs
Exemple : itration sur un tableau avec un pointeur.
void afficher(char chaine[]) { char * tmp; tmp = &chaine[0]; while (*tmp != '\0') { putchar(*tmp); tmp++; } }

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Et les tableaux

Rappel
Le nom d dun n tablea tableau dsigne son adresse adresse.
Pointeur sur le premier octet du premier lment du tableau.

On peut passer un tableau en paramtre sous la forme dun pointeur.

En C
Les tableaux et les pointeurs dsignent une adresse. Les oprateurs des tableaux s sappliquent appliquent aux pointeurs. On peut indicer un pointeur avec []. On peut affecter un pointeur directement avec ladresse dun tableau.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

10

Les pointeurs
Et les tableaux
void afficher(char chaine[]) { char * tmp; tmp = chaine; // cette affectation est valide while (*tmp != '\0') { putchar(tmp[0]); // tmp[0] quivalent *tmp tmp++; } } // Autre forme possible pour le prototype void afficher(char * chaine) . . .
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 11

Les pointeurs
Somme et diffrence de 2 pointeurs Somme de 2 pointeurs
Cette opration p est invalide. Refuse la compilation.

Diffrence de 2 pointeurs
Cette opration est valide. Elle renvoie la diffrence entre les 2 adresses. Exprime en multiple du nombre dlments du type point.

Exemple
int tab[50]; int * t1, * t2; t1 = &tab[0]; t2 = &tab[1]; printf("%d\n", t2 - t1); // Affiche 1

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

12

Les pointeurs
Pointeurs non typs Un pointeur dsigne une adresse. Dans certaines circonstances, on veut
Manipuler une adresse. Sans indiquer le type des lments points.

Pointeur non typ


Le langage C permet de manipuler des pointeurs non typs.

Syntaxe
void* pointeur; int i; double x; pointeur = &i; pointeur = &x; int fread(void* buffer, int size, int count, FILE* file);

Exemple

Restriction

Un pointeur non typ ne peut pas tre drfrenc avec *


Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 13

Les pointeurs
Transtypage

Un pointeur void * est inutilisable.


Po Pour r lire ou o crire ce q qui i est point point, il fa faut t prciser le t type pe des lments points. On change le type du pointeur par transtypage (type cast).

Effet
Ladresse reste inchange. Le type des lments points devient connu. On peut alors drfrencer le pointeur transtyp. transtyp

Le transtypage est possible


Entre tous les types de pointeurs. Il est aussi possible de transtyper un entier en pointeur et vice versa.
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 14

Les pointeurs
Transtypage
#include <stdio.h> void mettre_a_zero(void * memoire, int nombre_octets) { int i; char* memoire_char; memoire_char = (char*)memoire; for (i = 0; i < nombre_octets; i++) memoire_char[i] = 0; } int main(int argc, char* argv[]) { int i; double x[100]; mettre_a_zero(&i, sizeof(i)); mettre_a_zero(&x, sizeof(x)); printf("Pressez une touche..."); _getch(); }
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 15

Les pointeurs
Utilisations originales diffrentes vues du contenu de la mmoire Quels sont les octets constituant un entier 32 bits ?
long l; unsigned char * pointeur; l = 0xABCDEF12; pointeur = &l; printf("%02x, %02x, %02x, %02x\n", pointeur[0], pointeur[1], pointeur[2], pointeur[3]);

Explication
La mme adresse peut tre vue comme :
Un long Un tableau de char

A004 A000

Sur ce processeur

ab cd ef 12
A003 A002 A001 A000

Le tableau commence par le petit morceau En anglais, little end. On parle de processeur travaillant en Little Endian
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

16

Les pointeurs
Utilisations originales les adresses absolues

Sur les micro contrleurs


Il y a des registres po pour r utiliser tiliser les priphriq priphriques. es Exemple : registre pour fixer ltat de sorties tout ou rien. Ces registres se trouvent des adresses fixes. Exemple : 0x00F3

Comment faire pour crire loctet 0x12 cette adresse ?


*((char *)0x00F3) = 0x12;
1. Transtypage de 0x00F3 en pointeur sur char. 2. Drfrencement pour accder ce qui est point, soit le registre situ en 0X00F3.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

17

Les pointeurs
NULL

Ladresse 0
S Sur r de nombreux nombre s systmes, stmes ladresse 0 est in invalide alide o ou rser rserve. e Un programme applicatif nutilise donc jamais cette adresse. On lutilise pour dnoter un pointeur vide ou invalide.

Utilisation
On peut ainsi tester si une adresse est valide en comparant avec 0.
if (pointeur == 0) ou if (pointeur != 0)

En gnral, gnral on utilise plutt la constante symbolique NULL


Dfinie dans stdio.h
#define NULL ((void *)0) ou if (pointeur != NULL)
18

Ce qui donne
if (pointeur == NULL)

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Les pointeurs
Passage en paramtre par valeur

Un pointeur peut tre pass en paramtre par valeur


Exemple E emple : la fonction printf
int printf(const char * format, ...);

Comme pour tout paramtre, la valeur est copie dans le paramtre formel. Simplement, dans ce cas, la valeur est une adresse.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

19

10

Les pointeurs
Passage en paramtre par adresse

Un pointeur peut tre pass en paramtre par adresse !


Exemple E emple
void message_erreur(int code, char** message);

Le paramtre message est de type


pointeur sur un pointeur de caractres. Dit de faon plus comprhensible : pointeur sur une chane de caractres.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

20

Les pointeurs
Passage en paramtre par adresse
#include <stdio.h> typedef enum { ok, erreur_simple, erreur_fatale } type_erreur; void message_erreur(type_erreur code, char** message) { switch (code) { case ok: *message = "Ok"; break; case erreur_simple: *message = "Erreur simple"; break; case erreur_fatale: *message = "Erreur fatale"; break; default: *message message = "Erreur Erreur inattendue"; inattendue ; break; } } int main() { char * msg; message_erreur(erreur_fatale, &msg); puts(msg); printf("Pressez une touche..."); _getch(); } Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 21

11

Les pointeurs
Dfinition de types pointeur
Constat
Les pointeurs sur des pointeurs sont peu lisibles. Alternative : crer un type pointeur plus explicite. explicite

Exemple
typedef char* string; void message_erreur(type_erreur code, string* message) { . . . *message = "Ok"; On reconnait un paramtre de . . . type string pass par adresse. } int main(int argc, char* argv[]) { string msg; message_erreur(erreur_fatale, &msg); puts(msg); printf("Pressez une touche..."); _getch(); }

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

22

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

23

12

Allocation dynamique de mmoire


Rappel : variables alloues sur la pile

Cration de variables locales


Les variables ariables locales et les paramtres sont placs s sur r la pile lentre dune fonction. Elles sont automatiquement libres la sortie de la fonction.

12345
A014
pointeur de pile

12345 12345 2.718281828459 3.14159f 0x103DAF93


24

A010 A00C A008 A004 A000

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

Limitations avec les variables de pile


1. Taille fixe des rsultats

La taille maximale des variables doit tre connue l avance lavance


Exemple : gets
char ligne[80]; // ne dpend pas de la longueur du texte saisi gets(char);

Comment crire une fonction renvoyant un rsultat dont la taille nest connue qu lexcution ?
// le rsultat dpend ncessairement de la taille du fichier char * lire_fichier_texte(const char * nom_fichier);

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

25

13

Limitations avec les variables de pile


2. Impossibilit de retourner un tableau cr par une fonction
#define MAX_POINT 1000 double* generer_sinus(double amplitude, int nombre_points) { double valeurs[MAX_POINT]; //rserver suffisamment d'espace int i; if (nombre_points < MAX_POINT) { for (i = 0; i < nombre_points; i++) valeurs[i] = amplitude * sin(i * 2 * M_PI / nombre points); nombre_points); return valeurs; Retourne ladresse dun tableau situ sur } la pile. else return NULL; La mmoire utilise sera recouverte par les } prochaines valeurs places sur la pile !
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 26

Allocation dynamique de mmoire


Principe

Exploitation de la mmoire disponible


La pile nocc noccupe pe q quune ne partie de la mmoire La mmoire restante peut aussi tre exploite par programme. On appelle cette zone le tas , heap en anglais.

pile

tas

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

27

14

Allocation dynamique de mmoire


Principe

Le tas permet
Dallouer Dallo er des blocs de mmoire pour po r le programme. programme De les librer lorsquils ne sont plus utiliss. Il peut alors y avoir fragmentation de la mmoire.

pile
Bloc 1 / 1000 octets Bloc 2 / 500 octets Bloc 3 / 1000 octets

tas

Bloc 4 / 1000 octets

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

28

Allocation dynamique de mmoire


Allocation la fonction malloc

Rle
malloc permet d dallouer allouer un bloc de mmoire. mmoire La taille est passe en paramtres (en octets).

Prototype
typedef unsigned int size_t; void* malloc(size_t size);

Fichier inclure
#include <stdlib.h>

Rsultat
malloc retourne ladresse du bloc en cas de succs.
Le bloc retourn NEST PAS initialis. La mmoire est rserve, pas de libration automatique.

NULL en cas dchec (le tas ne comporte pas un bloc suffisant).


Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 29

15

Allocation dynamique de mmoire


Allocation la fonction malloc - exemple int main() { void* bloc; bloc = malloc(1000); if (bloc != NULL) printf("Succes\n"); else printf("Echec\n"); system("PAUSE"); return 0; }
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 30

Allocation dynamique de mmoire


Utilisation comme une variable int main() { double* bloc; bloc = (double*)malloc(sizeof(double)); if (bloc != NULL) { *bloc = 3.14; printf("Succes: %lf\n", *bloc); } else printf("Echec\n"); system("PAUSE"); return 0; }
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 31

16

Allocation dynamique de mmoire


Utilisation comme un tableau de taille variable
double* generer_sinus(double amplitude, int nombre_points) { double* valeurs; int i; valeurs = (double*)malloc(nombre_points * sizeof(double)); if (valeurs != NULL) { for (i = 0; i < nombre_points; i++) valeurs[i] = amplitude * sin(i * 2 * M_PI / nombre_points); } return valeurs; }

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

32

Allocation dynamique de mmoire


Utilisation comme une structure de taille variable
typedef struct { int taille; double valeurs[0]; } tableau_points; tableau_points* generer_sinus(double amplitude, int nombre_points) { tableau_points* tableau; int i; tableau = (tableau_points*)malloc( sizeof(tableau_points) + nombre_points * sizeof(double)); if (tableau != NULL) { tableau->taille = nombre_points; for (i = 0; i < nombre_points; i++) tableau->valeurs[i] = amplitude * sin(i * 2 * M_PI / nombre_points); } return tableau; }
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 33

17

Allocation dynamique de mmoire


Utilisation comme une structure de taille variable vue mmoire
typedef struct { int taille; double valeurs[0]; } tableau_points; int taille; Alignement mmoire

tableau = (tableau_points*)malloc( sizeof(tableau_points) + nombre points * sizeof(double)); nombre_points

double valeurs[];

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

34

Allocation dynamique de mmoire


Libration avec free

La taille du tas est limite. Lorsquun L bl bloc allou ll nest t plus l utilis tili
Il faut le restituer sur le tas. Il pourra ainsi tre rutilis pour un malloc ultrieur.

La fonction free permet de librer un bloc.


void free(void *memblock);

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

35

18

Allocation dynamique de mmoire


Libration avec free - Exemple int main() { void* bloc; bloc = malloc(1000); if (bloc != NULL) { printf("Succes\n"); free(bloc); } else printf("Echec\n"); system("PAUSE"); return 0; }
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 36

Allocation dynamique de mmoire


Les dangers - dbordement lors de laccs un bloc - exemple
double* generer_sinus(double amplitude, int nombre_points) { double* valeurs; int i; valeurs = (double*)malloc(nombre_points * sizeof(double)); if (valeurs != NULL) { for (i = 0; i <= < nombre_points; nombre points; i++) valeurs[i] = amplitude * sin(i * 2 * M_PI / nombre_points); } return valeurs; }
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 37

19

Allocation dynamique de mmoire


Les dangers - dbordement lors de laccs un bloc - consquences

Ecriture dans le tas hors de la zone rserve. Risque Ri d de corruption ti d de d donnes. Risque de corruption de la structure du tas.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

38

Allocation dynamique de mmoire


Les dangers - Utilisation dun bloc prcdemment libr
int main() { do ble* bloc double* bloc; bloc = (double*)malloc(sizeof(double)); if (bloc != NULL) { *bloc = 3.14; printf("Succes: %lf\n", *bloc); free(bloc); *bloc = 1.0; Attention ! } else Utilisation dune zone mmoire qui nest printf("Echec\n"); plus rserve ! system("PAUSE"); return 0; Comportement indfini.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

39

20

Allocation dynamique de mmoire


Les dangers - Libration dun bloc non allou int main() { double* bloc; double x; x = 1.2; bloc = &x; free(bloc); system("PAUSE"); return 0; } Comportement indfini.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

40

Allocation dynamique de mmoire


Les dangers - Fuites de mmoire

Si le programme ne libre pas la mmoire alloue


Son occupation occ pation mmoire a augmente gmente chaq chaque e no nouvelle elle allocation allocation. Consommation progressive de toute la mmoire. Situation catastrophique :
Impossibilit de fonctionner. Blocage de toutes les fonctions de lordinateur.

Dans la pratique
Programmes qui plantent au bout de quelques heures ou jours. jours Pas de stabilit dans le temps.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

41

21

Allocation dynamique de mmoire


Les dangers - Fuites de mmoire Exemple
int main() { int i; for (;;) malloc(100000); system("PAUSE"); return 0; } Consommation rapide des 2 GB de mmoire disponible

Utilisation du fichier dchange. Ralentissement complet du PC. Terminaison du programme, Retour la normale.
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 42

Allocation dynamique de mmoire


Autres fonctions - calloc

Prototype
void * calloc (size (size_t t count, count size_t size t size);

Effet
Alloue count x size octets Initialise toute la zone mmoire avec des zros.

Remarques
Effet similaire malloc, avec en plus initialisation de la mmoire. La mmoire doit galement tre libre avec free.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

43

22

Allocation dynamique de mmoire


Autres fonctions - realloc

Prototype
void oid * realloc ( (void oid * ptr ptr, si size_t e t si size); e)

Effet
Ralloue un bloc de mmoire une nouvelle taille. Si ptr est NULL, cre un nouveau bloc. Si la rallocation choue, retourne NULL. Le bloc pass en paramtre reste alors inchang. En cas de succs, succs ladresse l adresse retourne peut tre diffrent de ptr ptr. Le bloc initialement point par ptr a alors t libr. Le bloc rallou est initialis avec le contenu du bloc ptr. Lespace supplmentaire est non initialis.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

44

Allocation dynamique de mmoire


alloca : allocation dynamique sur la pile

Prototype
#include <malloc.h> <malloc h> void* alloca(size_t size);

Effet
Rserve un espace sur la pile.
Excution trs rapide (pas de recherche dun bloc vide). Pas de fragmentation de la mmoire.

La taille est dfinie dynamiquement lexcution l excution. Lespace est libr la sortie de la fonction appelante. NE PAS retourner ladresse obtenue. NE PAS APPELER free.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

45

23

Allocation dynamique de mmoire


alloca : allocation dynamique sur la pile
int main() { do ble* tablea double* tableau; int i, nombre_valeurs; printf("Nombre de valeurs: "); scanf("%d", &nombre_valeurs); // allocation dynamique d'un tableau sur la pile tableau = (double*)alloca(nombre_valeurs * sizeof(double)); for (i = 0; i < nombre_valeurs; i++) { printf("Valeur n %d:", i + 1); scanf("%lf", &tableau[i]); } system("PAUSE"); return 0; // libration automatique de lespace allou par alloca }
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 46

Fonctions de manipulation de la mmoire


Introduction

Besoin frquent doprations sur la mmoire


Notamment a avec ec les tablea tableaux. Il existe trs peu doprations sur la tableaux en langage C.

Exemples doprations
Initialisation dun zone mmoire (ou dun tableau). Copie. Dplacement. Comparaison Comparaison.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

47

24

Fonctions de manipulation de la mmoire


Exemple : initialisation de la mmoire

void initialiser(void * memoire, int taille, char valeur) { int i; for (i = 0; i < taille; i++) ((char*)memoire)[i] = valeur; } Fonctions dusage trs courant Disponibles dans la bibliothque standard.
Implmentation optimise.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

48

Fonctions de manipulation de la mmoire


string.h
// Initialiser une zone mmoire void* memset(void * ptr, int value, size_t _ num); // Copier une zone mmoire void* memcpy(void * destination, const void * source, size_t num); // Copier une zone mmoire. // Fonctionne bien mme en cas de recouvrement des 2 zones // mais plus lente que memcpy. void* memmove(void * destination, const void * source, size_t i t num); ) // Comparer deux zones int memcmp(const void * ptr1, const void * ptr2, size_t num); // Recherche d'un caractre. Renvoie ladresse de la 1re occurrence. void* memchr(const void * ptr, int value, size_t num);
Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire 49

25

Quavons-nous appris ?
Les oprations sur les pointeurs Lallocation L ll ti d dynamique i d de mmoire i
Application au cas des tableaux de taille variable.

Les fonctions de manipulation de la mmoire.

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

50

Vos questions

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

51

26

Analyse et programmation 2 - Les pointeurs et l'allocation dynamique de mmoire

52

27