1. 2 3 4 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 void main()

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

Premier programme en C :
Cours de C – Séance dexercices 12 Octobre Exercice 5 Idem quexercice 1 : lire une ligne au clavier Sans limitation de la longueur de la ligne (utilisez.
Cours de C – Séance dexercices 25 Septembre 2007.
Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Rappels C.
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Paramètres et pointeurs
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Fonctions Dans un programme : certaines opérations (ou séquences d'opérations) peuvent se répéter plusieurs fois : affichage de tableau, saisie, ou même.
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Points importants de la semaine Les types arithmétiques. Les opérateurs.
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Structures de données et algorithmes – C5 Maria-Iuliana Dascalu, PhD
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
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()
TRAITEMENT DE STRUCTURES
Points importants de la semaine Les enregistrements.
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Les tris.
FICHIERS.
Les fichiers binaires en C++
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT-2000: Structures de données
Points importants de la semaine Les allocations programmées de mémoire. Les enregistrements.
Un langage de programmation hybride
8PRO100 Éléments de programmation Les types composés.
Structures de données IFT-2000
FONCTIONS avec paramètres en Entrée/Sortie
Plan cours La notion de pointeur et d’adresse mémoire.
Structures de données IFT-2000
La librairie assert.h.
L’essentiel du langage C
Le langage C Structures de données
2.1 - Historique Chapitre 2 : Introduction au langage C++
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Programmation en Java Tableaux NGUYEN Thi Minh Tuyen
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.
Un survol du language C.
ETNA – 1ème année Guillaume Belmas –
Strings et Tableaux en Java
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
8PRO100 Éléments de programmation Les tableaux multi-dimensionnels.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
6ième Classe (Mercredi, 17 novembre) CSI2572
Les fonctions. Déclaration/Prototypes C’est une instruction fournissant au compilateur des infos sur une fonction qu’on envisage d’appeler par le suite.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Informatique 2A Langage C 3 ème séance.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

1

2

3

4

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

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

8

9

10

11 L’ajout d’un élément nouveau

12 L’ajout d’un élément nouveau

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

14 L’adresse du nouveau tableau

15

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 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 d’un tableau de 3 entiers Initialisation

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

18

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; } printf("%d",*t);... libération erreur

20 #include 1/2 #include void main() { int *sptr,*eptr,*current; sptr=(int*)calloc(7,sizeof(int)); if( sptr == NULL ) { fprintf(stderr,"Allocation impossible");exit(1);} 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 Allocation Remplissage et affichage

21 2/2 printf("Appuyer une touche!\n"); getch(); sptr=(int*)realloc(sptr,20); if( sptr == NULL ) { fprintf(stderr,"Allocation impossible"); exit(1); } eptr=sptr+12; printf("Apres realloc\n"); for(current=sptr;current<eptr;current++) printf("%d\n",*current); free(sptr); sptr=NULL; } Exemple 1 Appuyer une touche! Apres realloc Modification de la taille Affichage de la nouvelle zone

22 #include void main() { int *sptr,*eptr,*current,*min_ptr; int min; sptr=(int*)calloc(7,sizeof(int)); if( sptr == NULL ) { fprintf(stderr,"Allocation impossible");exit(1);} eptr=sptr+7; for(current=sptr;current<eptr;current++) *current=rand(); min=*sptr; min_ptr=sptr; for(current=(sptr+1);current<eptr;current++) if(*current<min) { min=*current; min_ptr=current; } printf("Avant realloc:min=%d,min_ptr=%p\n",min,min_ptr); 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 sptr=(int*)realloc(sptr,20); if( sptr == NULL ) { fprintf(stderr,"Allocation impossible"); exit(1); } eptr=sptr+12; min=*sptr; min_ptr=sptr; for(current=(sptr+1);current<eptr;current++) if(*current<min) { min=*current; min_ptr=current; } printf("Apres realloc:min=%d,min_ptr=%p\n",min,min_ptr); free(sptr); sptr=NULL; } Avant realloc:min=130,min_ptr=24BF:0904 Apres realloc:min=0,min_ptr=23D7:00F4 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. Modification de la taille

24 Exemple 3 #include 1/2 #include #define element float void main() { element *tab; int i; tab=(element *)calloc(3,sizeof( element )); printf("tab=%p\n",tab); for(i=0;i<3;i++) printf("%6.2f",*tab++); printf("\n"); printf("tab=%p\n",tab); tab-=3 ; //retour de pointeur printf("tab=%p\n",tab); Pointeur sur le tableau tab=2357: tab=2357:0912 tab=2357:0906

25 Exemple 3 for(i=0;i<3;i++) 2/2 { *tab=i+1; printf("%6.2f",*tab++); } printf("\n"); tab-=3 ; free(tab); tab=NULL; printf("tab=%p\n",tab); } Remplissage du tableau et affichage Si on n’a pas besoin du tableau tab=0000:0000

26 #include 1/2 #include main() { char *ip, *chaine="Programmation"; int nbr,i, nitems; nbr = 1; ip = (char *)malloc(nbr*sizeof(char)); /* reservation initialle */ if(ip == NULL) { printf("memoire n'est pas reservee\n"); exit(1); } Exemple 3 : lire des caractères d’une chaine des caractères et les déplacer dans un tableau dynamique

27 nitems = 0; 2/2 while(*chaine != NULL) { if(nitems >= nbr) { /* reservation de la memoire supplementaire */ nbr += 1; ip = (char *)realloc(ip, nbr * sizeof(char)); if(ip == NULL) { printf("memoire n'est pas reservee\\n"); exit(1); } } ip[nitems++] = *chaine++; } *chaine=NULL; for(i=0;i<nbr;i++) putchar(*ip++); } Exemple 3 : lire des caractères d’une chaine des caractères et les déplacer dans un tableau dynamique Programmation

28 # include float* saisie(float * tab,int *nb); void affiche(float * tab,int nb); void main() { float* tab; int nb; tab=saisie (tab,&nb); affiche (tab,nb); } Exemple 4 : Écrire un programme qui saisit les nombres réels (nombre inconnus) au clavier pour remplir un tableau dynamique. Afficher le tableau dynamique à l’écran.

29 float* saisie(float *tab,int *nb) { int i=0; int rez=1; *nb=1; printf("\nC'est parti pour la saisie des valeurs\n"); tab=(float *)malloc(*nb*sizeof(float)); if(tab==NULL) exit(1); do { if(i >= *nb) { (*nb)++; tab= (float *)realloc(tab,*nb*sizeof(float)); if(tab==NULL) exit(1); } printf("position %d : donnez la valeur : ",i); rez=scanf("%f",&tab[i]); i++; } while(rez); *nb-=1; return tab; } Modification de la taille Allocation initial

30 void affiche(float * tab,int nb) { int i; printf("\nle tableau contient %d valeurs",nb); printf("\nvaleurs du tableau : "); for (i=0;i<nb;i++,tab++) printf ("\n\tposition %d : %f",i,*tab); }

31