1 / 23

La fonction alloue un bloc de taille size.

La fonction alloue un bloc de taille size. La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le contenu de la zone allouée est aléatoire. Le premier exemple:. #include <stdio.h> #include <stdlib.h> void main() { int * p;

shea
Download Presentation

La fonction alloue un bloc de taille size.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. La fonction alloue un bloc de taille size. La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le contenu de la zone allouée est aléatoire. 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); } } Allocation pour un nombre entier Message d’erreur

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

  3. L’ajout d’un élément nouveau

  4. L’ajout d’un élément nouveau

  5. L’ajout d’un élément nouveau L’ancien tableau n’existe plus

  6. L’adresse du nouveau tableau

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

  8. Ajout d’un élément au tableau 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]); } Initialisation Affichage du tableau tab[0]=1 tab[1]=2 tab[2]=3 tab[3]=4

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

  10. 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. Allocation #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); } Avant realloc 346 130 10982 1090 11656 7117 17595 Remplissage et affichage

  11. Exemple 1 Modification de la taille 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); } Appuyer une touche! Apres realloc 346 130 10982 1090 11656 7117 17595 -1 4360 9175 32004 0 Affichage de la nouvelle zone

  12. Exemple 2 Faire les même réservations de la mémoire. Trouver l’ élémentplus petit. Voir comment se déplace le pointeur. #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; } Allocation et remplissage L’ élémentminimal

  13. Exemple 2 Faire les même réservations de la mémoire. Trouver l’ élémentplus petit. Voir comment se déplace le pointeur. 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); } déplacement du pointeur Avant realloc:min=130 Apres realloc:min=-1

More Related