Allocation dynamique de mémoire

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Introduction au Langage C,C++
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
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.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
GEF 243B Programmation informatique appliquée
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',
FLSI602 Génie Informatique et Réseaux
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()
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.
8PRO100 Éléments de programmation Les types composés.
Plan cours La notion de pointeur et d’adresse mémoire.
L’essentiel du langage C
2.1 - Historique Chapitre 2 : Introduction au langage C++
Le langage C Rappel Pointeurs & Allocation de mémoire.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
et quelques rappels sur certains éléments du langage C
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
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()
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
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.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
CINI – Li115 1 Semaine 4 Révisions ● Questions de cours ● Types des expressions ● Déclaration de variables ● Instruction conditionnelle et boucles ● Structure.
CINI – Li115 1 Semaine 10 Les pointeurs ● Notion d'adresse ● Déclaration et utilisation de pointeurs ● "Types pointeur" et initialisation des pointeurs.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
A quoi sert la programmation? - indispensable pour plusieurs métiers. - passion. But du cours: - suite du cours Prog. Imp. I - fichiers, pointeurs, modularité.
1 © Copyright 2005, Philippe Arlotto tln.fr Creative Commons Attribution-ShareAlike 2.0 license 27/09/2016 Algorithmique & Langage.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
Tableaux en C Mardi 2/05.
Semaine 8 Retour sur les tableaux : fonctions et récursivité
Synthèse TP 2 Codeblock 1 Les objectifs de ce tp sont :
JAVA.
Les tableaux différencier les variables simples des variables indicées (ordonnées et numérotées) un identificateur unique désigne un ensemble, une collection.
Langage C Structure d'un programme Types Lire Ecrire Tester
Pas de variable globale
Les notions de classe et d'objet
Eléments d’Informatique Cours11 – Allocation dynamique, listes chaînées Catherine Recanati.
Pointeurs et langage C.
AO (Architecture des ordinateurs)
Principes de programmation (suite)
Algorithmique Langage C
Semaine 11 Les pointeurs (suite)
Les fonctions.
Matrices, déclaration en CSharp
Gestion dynamique de la mémoire : new / delete
SIF-1053 Architecture de ordinateurs
Arguments de la ligne de commande
Les chaînes de caractères et le langage C
Programmation Impérative II
IFT1969 Programmation scientifique en C Michel Reid.
Notions de pointeurs en C
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Programmation en C++ C++ de base
Eléments de base du langage C
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Les exceptions Le mécanisme des exceptions est destiné à permettre aux fonctions profondes d'une bibliothèque de notifier la survenue d'une erreur aux.
Cours Programmation en C. Traitement de l’information Catégorie d’information Les données Les résultats Les informations intermédiaires.
Dépiler et mettre valeur dans RT (récup. paramètre)
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
QCM Pointeurs 2 / Q1 On considère la déclaration suivante : char *ptc ; ptc peut contenir : 1) des valeurs de variables de type caractère 2) des adresses.
Présentation Chaînage dynamique Retour sur les tableaux
Eléments de base du langage C
Transcription de la présentation:

Allocation dynamique de mémoire Programmation Impérative II Allocation dynamique de mémoire Matrice minh-anh.tran@u-pec.fr

Rappel. Après sa déclaration, un pointeur est nul systématiquement Rappel. Après sa déclaration, un pointeur est nul systématiquement. Il ne pointe vers aucune adresse !!!

Utilisation de pointeurs 1ère option: Pointer vers l'adresse d'une variable déjà définie char * s, c; Déclaration de s, c s Pointer s vers c s = &c; s[0] = getchar (); printf (“%c\n”, s[0]); printf (“%c\n”, *s); c 2ème option: allocation dynamique de mémoire

Allocation dynamique - malloc Par la fonction malloc de la bibliothèque stdlib s = malloc (8); s 8 octets Attention. La valeur de chaque bit est indéterminée. Il faut utiliser la bibliothèque stdlib #include <stdlib.h> S'il n'y a plus de mémoire disponible, s = NULL

Allocation dynamique - calloc s s = calloc(2, 4); 4 octets presque équivalente à s = malloc(8); La différence. Tous les bits sont mis à 0

Allocation dynamique - calloc \0 s Allocation dynamique - calloc Exemples. char * s; s = calloc(5, sizeof(char)); réserve (5*sizeof(char)) octets sur la mémoire, et les mettre à valeur '\0'

Allocation dynamique - calloc p Allocation dynamique - calloc Exemples. int * p; p = calloc(3, sizeof(int)); réserve (3*sizeof(int)) octets sur la mémoire, et les mettre à valeur 0 De même pour les autres types: float, double...

Allocation dynamique La fonction sizeof Type Taille char 1 octet short int 2 octets int 4 octets float double 8 octets

Allocation dynamique - realloc p Allocation dynamique - realloc 1 2 int * p; p = malloc(2 * sizeof(int)); p[0] = 1; p[1] = 2; 3 p = realloc(p, 3 * sizeof(int)); p[2] = 3; redimensionne le bloc alloué avec la nouvelle taille 3 * sizeof(int) p = NULL s'il n'y a plus de mémoire disponible

Allocation dynamique - realloc 1 p 2 3 Allocation dynamique - realloc int * p; p = malloc(2 * sizeof(int)); p[0] = 1; p[1] = 2; int * temp; temp = realloc(p, 3 * sizeof(int)); if (temp != NULL) { p = temp; }

Allocation dynamique - free 1 p 2 3 Allocation dynamique - free Libération de mémoire: free (p); Libérer la mémoire reservée - rendre cette mémoire disponible Attetion. La fonction free ne change pas la valeur de p, c.a.d. p pointe vers la même location

Allocation dynamique - free 1 p 2 3 Allocation dynamique - free Si p=NULL, cette fonction ne fait strictement rien. En revanche, si l'on appelle free(p) dont p a précédemment été désalloué, le comportement de cette fonction est indéterminée. Il vaut mieux mettre: free (p); p = NULL;

Matrices - Tableaux à 2 indices int T[3][4]; T désigne un tableau de 3 éléments, chacun de ces éléments étant un tableau de 4 éléments T &T[0][0] T[0] &T[0][0] T[1] &T[1][0] T+1 &T[1][0] *(T+1)+2 &T[1][2]

M[0] est l’adresse du M[0][0] M[1] est l’adresse du M[1][0] b c d e f M[0] *M M[1] *(M+1) Matrice char M[2][3] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}}; M[0] est l’adresse du M[0][0] M[1] est l’adresse du M[1][0]

Matrice char M[2][3] = {{'a', 'b', 'c'} {'d', 'e', 'f'}}; char * P; M[0] *M M[1] *(M+1) Matrice char M[2][3] = {{'a', 'b', 'c'} {'d', 'e', 'f'}}; char * P; P = (char *) M; P P+3 changement de type

Matrice – allocation dynamique char ** M; M = malloc (2 * sizeof(char *)); M[0] = calloc (2 * sizeof(char)); M[1]= malloc (3 * sizeof(char)); M[0][0] = 'a'; M[0][1] = 'b'; M[1][0] = 'c'; M[1][1] = 'd'; M[1][2] = 'e'; Que se passe-t-il dans la mémoire?

Matrice – allocation dynamique Libération de mémoire: free(M[0]); M[0] = NULL; free(M[1]); M[1] = NULL; free(M); M = NULL;