Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parBarthomieu Besson Modifié depuis plus de 10 années
1
1
2
2
3
3
4
4
5
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() {int * p; p = (int *)malloc (sizeof(int)); if ( p == NULL ) { fprintf(stderr,"Allocation impossible \n"); exit(EXIT_FAILURE); } } Message derreur Allocation pour un nombre entier Le contenu de la zone allouée est aléatoire. La fonction alloue un bloc de taille size.
6
6 Allocation pour un tableau de 3 nombres réels #include 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
7
7
8
8
9
9
10
10
11
11 Lajout dun élément nouveau
12
12 Lajout dun élément nouveau
13
13 Lajout dun élément nouveau Lancien tableau nexiste plus
14
14 Ladresse du nouveau tableau
15
15
16
16 La fonction ne fait quun changement de taille. On peut ajouter ou enlever une case à la fin dun tableau dynamique sans le modifier. #include 1/2 #include 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 dun tableau de 3 entiers Initialisation
17
17 tab=(int *)realloc(tab, 4 * sizeof(int)); 2/2 tab[3]=4; for(i=0;i<4;i++) printf(tab[%d]=%d\n,i,tab[i]); } Ajout dun élément au tableau tab[0]=1 tab[1]=2 tab[2]=3 tab[3]=4 Initialisation Affichage du tableau
18
18
19
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
20
20 #include 1/2 #include 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 1 Ré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 realloc 346 130 10982 1090 11656 7117 17595 Allocation Remplissage et affichage
21
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 realloc 346 130 10982 1090 11656 7117 17595 4360 9175 32004 0 Modification de la taille Affichage de la nouvelle zone
22
22 #include 1/2 #include 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 2 Faire 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
23
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=130 Apres realloc:min=-1 Exemple 2 Faire 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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.