1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon...
-
Upload
barthomieu-besson -
Category
Documents
-
view
106 -
download
0
Transcript of 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon...
![Page 1: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/1.jpg)
1
![Page 2: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/2.jpg)
2
![Page 3: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/3.jpg)
3
![Page 4: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/4.jpg)
4
![Page 5: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/5.jpg)
5
La fonction alloue un bloc de taille size.
Il faut indiquer la taille du bloc que l’on veut allouer.
Le premier exemple:
#include <stdio.h>#include <stdlib.h>void main() { int * p;
p = (int *)malloc (sizeof(int));if ( p == NULL )
{ fprintf(stderr,"Allocation impossible \n"); exit(EXIT_FAILURE);
} }
Message d’erreur
Allocation pour un nombre entier
Le contenu de la zone allouée est aléatoire .
La fonction alloue un bloc de taille size.
![Page 6: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/6.jpg)
6
Allocation pour un tableau de 3 nombres réels
#include <stdio.h>#include <stdlib.h>void main() { float * tab;
tab = (float *)malloc (3*sizeof(float));if ( tab == NULL )
{ fprintf(stderr,"Allocation impossible \n"); exit(EXIT_FAILURE);
} }
Allocation pour un tableau
![Page 7: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/7.jpg)
7
![Page 8: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/8.jpg)
8
![Page 9: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/9.jpg)
9
![Page 10: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/10.jpg)
10
![Page 11: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/11.jpg)
11
L’ajout d’un élément nouveau
![Page 12: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/12.jpg)
12
L’ajout d’un élément nouveau
![Page 13: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/13.jpg)
13
L’ajout d’un élément nouveau
L’ancien tableau n’existe plus
![Page 14: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/14.jpg)
14
L’adresse du nouveau tableau
![Page 15: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/15.jpg)
15
![Page 16: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/16.jpg)
16
La fonction ne fait qu’un changement de taille.
On peut ajouter ou enlever une case à la fin d’un tableau dynamique sans le modifier .
#include <stdio.h> 1/2#include <stdlib.h>void main() { int * tab,i;
tab = (int *)calloc (3 , sizeof(int));if ( tab == NULL )
{ fprintf(stderr,"Allocation impossible \n"); exit(EXIT_FAILURE);
}tab[0]=1;tab[1]=2;tab[2]=3;
Création d’un tableau de 3 entiers
Initialisation
![Page 17: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/17.jpg)
17
tab=(int *)realloc(tab, 4 * sizeof(int)); 2/2tab[3]=4;
for(i=0;i<4;i++)printf(“tab[%d]=%d\n”,i,tab[i]);
}
Ajout d’un élément au tableau
tab[0]=1tab[1]=2tab[2]=3tab[3]=4
Initialisation
Affichage du tableau
![Page 18: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/18.jpg)
18
![Page 19: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/19.jpg)
19
Si vous tentez de libérer un pointeur NULL la fonction ne fera strictement rien.
Si vous libérer un bloc qui a précédement été désalloué, le comportement de la fonction est alors indéterminé.
Il faut forcer le pointeur que l'on vient de libérer à la valeur NULL .
. . .int * entier= (int *)malloc (sizeof(int));if( entier == NULL )
{ fprintf(stderr,"Allocation impossible");}else
{ *entier = 3; printf("%d",*entier); free(entier); entier = NULL;}
libération
![Page 20: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/20.jpg)
20
#include <stdio.h> 1/2#include <conio.h> #include <stdlib.h>void main()
{ int *sptr,*eptr,*current,*nouv; sptr=(int*)calloc(7,sizeof(int)); eptr=sptr+7; printf("Avant realloc\n"); for(current=sptr;current<eptr;current++)
{ *current=rand();printf("%d\n",*current);
}
Exemple 1Réserver de la mémoire pour 7 éléments entiers. Remplir la zone avec nombres arbitraires et les afficher. Modifier la taille de la mémoire préalablement alloué et afficher la nouvelle zone.
Avant realloc34613010982109011656711717595
Allocation
Remplissage et affichage
![Page 21: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/21.jpg)
21
free(sptr); 2/2 printf("Appuyer une touche!\n"); getch(); nouv=(int*)realloc(sptr,20); sptr=(int *)nouv; eptr=sptr+12; printf("Apres realloc\n"); for(current=sptr;current<eptr;current++)
printf("%d\n",*current); free(sptr);}
Exemple 1
Appuyer une touche!Apres realloc34613010982109011656711717595-143609175320040
Modification de la taille
Affichage de la nouvelle zone
![Page 22: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/22.jpg)
22
#include <stdio.h> 1/2#include <stdlib.h>void main()
{ int *sptr,*eptr,*current,*nouv,*min_ptr; int min; sptr=(int*)calloc(7,sizeof(int)); eptr=sptr+7; for(current=sptr;current<eptr;current++)
*current=rand(); min=*sptr; for(current=(sptr+1);current<eptr;current++)
if(*current<min){min=*current; min_ptr=current;}
Exemple 2Faire les même réservations de la mémoire. Trouver l’ élément plus petit. Voir comment se déplace le pointeur.
Allocation et remplissage
L’ élément minimal
![Page 23: 1. 2 3 4 5 La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()](https://reader033.fdocuments.net/reader033/viewer/2022051614/551d9da3497959293b8d3aaf/html5/thumbnails/23.jpg)
23
printf("Avant realloc:min=%d\n",*min_ptr); 2/2 free (sptr); nouv=(int*)realloc(sptr,5); min_ptr+=nouv-sptr; printf("Apres realloc:min=%d\n",*min_ptr);}
Avant realloc:min=130Apres realloc:min=-1
Exemple 2Faire les même réservations de la mémoire. Trouver l’ élément plus petit. Voir comment se déplace le pointeur.
déplacement du pointeur