L Allocazione Dinamica della Memoria
|
|
- Fabrizio Caputo
- 7 anni fa
- Visualizzazioni
Transcript
1 L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, Catania Sommario Questo documento tratta l allocazione dinamica della memoria in C. Verrà evidenziato come, alcune volte, l utilizzo di strutture dati di tipo statico non sono opportune in certi scenari applicativi. Saranno descritte in dettaglio le funzioni C per la gestione dinamica della memoria e presentati diversi esempi. Indice 1 Introduzione 1 2 Perchè Allocare Dinamicamente? Sovradimensionamento Allocazione Dinamica Gestione Dinamica della Memoria calloc() e malloc() free() realloc() Matrici Dinamiche 6 5 Esercizi 7 1 Introduzione La scelta delle appropriate strutture dati è di fondamentale importanza per la risoluzione di un certo problema almeno tanto quanto un buon programma di manipolazione. Fin qui ci siamo occupati di strutture dati sia di tipo scalare (tipo intero, reale, carattere) sia di tipo strutturato (stringhe, vettori, e strutture). A ciascuna di esse abbiamo associato le relative rappresentazioni interne previste dal C. Le variabili corrispondenti ai tipi suddetti non possono mutare le loro caratteristiche in fase di esecuzione e pertanto sono dette statiche. Vogliamo occuparci ora di un altro tipo di variabili: quelle dinamiche cioè le variabili che possono essere create e/o accresciute in fase di esecuzione. 1
2 2 Perchè Allocare Dinamicamente? Il lettore potrebbe chiedersi qual è la necessità di utilizzare l allocazione statica piuttosto che quella dinamica. Si consideri per esempio il seguente frammento di codice per il calcolo della media degli elementi di un vettore. Una prima versione potrebbe essere: # d e f i n e N 1 0 main ( ) i n t v [N ], i, somma, media ; / i n s e r i m e n t o d a t i / f o r ( i = 0 ; i <N ; i ++) p r i n t f ( " I n s e r i s c i elemento %d esimo : " ) ; s c a n f ("%d ", & v [ i ] ) ; / c a l c o l o d e l l a media e v i s u a l i z z a z i o n e / somma = 0 ; f o r ( i = 0 ; i <N ; i ++) somma = somma + v [ i ] ; media = somma / N; p r i n t f ( " La mediaè : % d ", media ) ; Il problema in questo caso è che tale codice effettua la media esclusivamente di N valori. Se si volesse per esempio calcolare la media di 20 numeri piuttosto che di 10 occorrerebbe modificare N: # d e f i n e N 2 0 e ricompilare il programma. Una soluzione per per rendere il programma più flessibile sarebbe quella di chiedere all utente di inserire il numero di elementi di cui calcolare la media e quindi utilizzare tale valore in luogo di N. Chiaramente una soluzione del tipo:... i n t num ; p r i n t f ( " Di q u a n t i v a l o r i vuoi f a r e l a media? " ) ; s c a n f ( "%d ", & num ) ; i n t v [ num ] ;... non è corretta in C visto che la dichiarazione di un vettore richiede la conoscenza del numero di elementi a tempo di compilazione. Nel suddetto frammento di codice, infatti, 2
3 il valore della variabile num non è noto a tempo di compilazione ma soltanto a tempo di esecuzione (in questo caso dopo l esecuzione della scanf). Nelle sottosezioni successive presentiamo due diverse soluzioni a questo problema. La prima sovradimensiona il vettore mentre la seconda fa uso dell allocazione dinamica della memoria. 2.1 Sovradimensionamento Una possibile soluzione potrebbe essere quella di sovradimensionare il vettore in questo modo: # d e f i n e MAXDIM main ( ) i n t v [MAXDIM ], num, i, somma, media ; p r i n t f ( " Di q u a n t i v a l o r i vuoi f a r e l a media? " ) ; s c a n f ( "%d ", & num ) ; / c o n t r o l l o se ho l e r i s o r s e n e c e s s a r i e / / per memorizzare t u t t i i d a t i / i f ( num > MAXDIM) p r i n t f ( " i l v e t t o r e òpu c o n t e n e r e a l massimo %d v a l o r i ", MAXDIM) ; e l s e / i n s e r i m e n t o d a t i / f o r ( i = 0 ; i <num ; i ++) p r i n t f ( " I n s e r i s c i elemento %d esimo : " ) ; s c a n f ("%d ", & v [ i ] ) ; / c a l c o l o d e l l a media e v i s u a l i z z a z i o n e / somma = 0 ; f o r ( i = 0 ; i <num ; i ++) somma = somma + v [ i ] ; media = somma / num ; p r i n t f ( " La media è : % d ", media ) ; 3
4 Il problema di questo approccio è però lo spreco di memoria. 2.2 Allocazione Dinamica Un approccio più efficiente dal punto di vista dell utilizzazione della risorsa memoria sarebbe quello di utilizzare sempre un vettore formato da un numero di elementi esattamente uguale a quelli da elaborare. main ( ) i n t v, num, i, somma, media ; p r i n t f ( " Di q u a n t i v a l o r i vuoi f a r e l a media? " ) ; s c a n f ( "%d ", & num ) ; / a l l o c o una à q u a n t i t d i memoria n e c e s s a r i a / / per memorizzare e s a t t a m e n t e num i n t e r i / / i l p u n t a t o r e v à p u n t e r e s a t t a m e n t e / / a l l i n i z i o d i q u e s t a area / v = ( i n t ) malloc ( num s i z e o f ( i n t ) ) ; / i n s e r i m e n t o d a t i / f o r ( i = 0 ; i <num ; i ++) p r i n t f ( " I n s e r i s c i elemento %d esimo : " ) ; s c a n f ("%d ", & v [ i ] ) ; / c a l c o l o d e l l a media e v i s u a l i z z a z i o n e / somma = 0 ; f o r ( i = 0 ; i <um ; i ++) somma = somma + v [ i ] ; media = somma / num ; p r i n t f ( " La mediaè : % d ", media ) ; / ora posso l i b e r a r e l area d i memoria / / p r e c e d e n t e m e n t e a l l o c a t a / f r e e ( v ) ; 4
5 Le funzioni malloc(), free() e diverse altre saranno discusse nella sezione successiva. 3 Gestione Dinamica della Memoria In questa sezione descriveremo in dettaglio le funzioni messe a disposizione dalla libreria standard C per la gestione dinamica della memoria. Le principali sono quattro: malloc(), calloc(), free(), ralloc() e sono accessibili includendo il file header stdlib.h: #include <stdlib.h> malloc() e calloc() allocano un blocco di memoria, free() libera un blocco di memoria precedentemente allocato e realloc() modifica le dimensioni di un blocco di memoria precedentemente allocato. 3.1 calloc() e malloc() Il prototipo delle funzioni malloc e calloc è il seguente: void c a l l o c ( i n t num_elementi, i n t dim_elemento ) ; void malloc ( d i m _ t o t a l e ) ; calloc() alloca memoria per un vettore di num_elementi elementi di dim_elemento bytes ciascuno e restituisce un puntatore alla memoria allocata. Inoltre inizializza ogni byte di tale blocco di memoria a zero. malloc() alloca dim_totale bytes di memoria e restituisce un puntatore a tale blocco. In questo caso la memoria non è inizializzata a nessun valore. Per determinare la dimensione in byte di un tipo di dato è possibile utilizzare la funzione sizeof(). Quindi, per esempio, per allocare un vettore di n elementi di tipo intero basta fare: i n t v ; v = ( i n t ) c a l l o c ( n, s i z e o f ( i n t ) ) ; Il puntatore v punterà al primo elemento di un vettore di n elementi interi. Si noti che è stato utilizzato il casting per assegnare il puntatore restituito da calloc a v. Infatti calloc restituisce un void* mentre v è un int*. Analogamente si può utilizzare la funzione malloc per ottenere lo stesso risultato: i n t v ; v = ( i n t ) malloc ( n s i z e o f ( i n t ) ) ; In questo caso occorre determinare il numero totale di bytes da allocare che è pari al numero di elementi del vettore per la dimensione in bytes del generico elemento. In questo caso poichè il vettore contiene interi, la dimensione del generico elemento è sizeof(int). 5
6 Sia calloc() che malloc() restituiscono NULL se non riescono ad allocare la quantità di memoria richiesta. 3.2 free() Il prototipo della funzione free() è: void f r e e ( void p t r ) ; Essa rilascia (libera o dealloca) lo spazio di memoria puntato da ptr il cui valore proveniva da una precedente malloc() o calloc() o realloc(). Se ptr è NULL nessuna operazione viene eseguita. 3.3 realloc() Il prototipo della funzione realloc() è: void r e a l l o c ( void p t r, i n t d i m _ t o t a l e ) ; Essa modifica la dimensione di un blocco di memoria puntato da ptr a dim_totale bytes. Se ptr è NULL, l invocazione è equivalente ad una malloc(dim_totale). Se dim_totale è 0, l invocazione è equivalente ad una free(ptr). Naturalmente il valore di ptr deve provenire da una precedente invocazione di malloc() o calloc() o realloc(). 4 Matrici Dinamiche Possiamo rappresentare una matrice come un vettore di vettori. Cioè l elemento -esimo di un vettore è un vettore che rappresenta le colonne della matrice. Per costruire una matrice dinamica di r righe e c colonne basterà eseguire le seguenti due operazioni: 1. Allocare dinamicamente un vettore di r puntatori (vettore delle righe). 2. Per ogni riga allocare un vettore di c elementi del tipo base considerato (vettore colonne). La Figura 1 mostra la rappresentazione grafica di una matrice dinamica. Per esempio il seguente frammento di codice definisce ed alloca una matrice dinamica di interi di r righe e c colonne. i n t m a t r i c e, i ; / a l l o c o i l v e t t o r e d e l l e r i g h e. Ogni e l e m e n t o / / d i q u e s t o v e t t o r e è un p u n t a t o r e / m a t r i c e = ( i n t ) malloc ( r s i z e o f ( i n t ) ) ; 6
7 Figura 1: Rappresentazione di una matrice dinamica vista come un vettore di puntatori. / per ogni r i g a a l l o c o l e c o l o n n e / m a t r i c e [ i ] = ( i n t ) malloc ( c s i z e o f ( i n t ) ) ; Per disallocare una matrice dinamica, invece, occorre procedere alla rovescia: prima si disallocano tutte le colonne quindi si disalloca il vettore dei puntatori alle colonne. / per ogni r i g a d i s a l l o c o l e c o l o n n e / f r e e ( m a t r i c e [ i ] ) ; / d i s a l l o c o i l v e r r o r e d e l l e r i g h e / f r e e ( m a t r i c e ) ; 5 Esercizi Esercizio 5.1 () Calcolare la media degli elementi di una sequenza di valori double inseriti dall utente. La fine della sequenza è identificata dal numero 0.0. Utilizzare vettori dinamici. 7
8 Risoluzione # i n c l u d e < s t d i o. h> # i n c l u d e < s t d l i b. h> void main ( ) double v e t t o r e, elemento, somma, media ; i n t i, j, f i n e ; v e t t o r e = NULL; / i n s e r i m e n t o d a t i / i = 0 ; f i n e = 0 ; while (! f i n e ) p r i n t f ( " I n s e r i s c i un elemento ( 0 p e r f i n i r e ) : " ) ; s c a n f ("% l f ", & elemento ) ; i f ( elemento = = 0. 0 ) f i n e = 1 ; e l s e / aumento d i 1 l a d i m e n s i o n e d e l v e t t o r e / v e t t o r e = ( double ) r e a l l o c ( v e t t o r e, ( i + 1 ) s i z e o f ( double ) ) ; v e t t o r e [ i ] = elemento ; i ++; / c a l c o l o e stampa d e l l a media / somma = 0. 0 ; f o r ( j = 0 ; j < i ; j ++) somma + = v e t t o r e [ j ] ; media = somma / i ; p r i n t f ( " La mediaè : % l f \ n ", media ) ; / d e l l o c a z i o n e d e l v e t t o r e / f r e e ( v e t t o r e ) ; 8
9 Esercizio 5.2 () Calcolare la trasposta di una matrice di interi allocata dinamicamente. Risoluzione # i n c l u d e < s t d i o. h> # i n c l u d e < s t d l i b. h> void main ( ) i n t m a t r i c e, t r a s p o s t a ; i n t r i g h e, c o l o n n e, r, c ; p r i n t f ( " Quante r i g h e ha l a m a t r i c e : " ) ; s c a n f ( "%d ", & r i g h e ) ; p r i n t f ( " Quante c o l o n n e ha l a m a t r i c e : " ) ; s c a n f ( "%d ", & c o l o n n e ) ; / a l l o c a z i o n e d e l l a m a t r i c e / m a t r i c e = ( i n t ) malloc ( r i g h e s i z e o f ( i n t ) ) ; f o r ( r = 0 ; r < r i g h e ; r ++) m a t r i c e [ r ] = ( i n t ) malloc ( c o l o n n e s i z e o f ( i n t ) ) ; / i n s e r i m e n t o d a t i / f o r ( r = 0 ; r < r i g h e ; r ++) f o r ( c = 0 ; c< c o l o n n e ; c ++) p r i n t f ( " I n s e r i s c i elemento d i r i g a %d e c o l o n n a %d : ", r, c ) ; s c a n f ("%d ", & m a t r i c e [ r ] [ c ] ) ; / a l l o c o l a m a t r i c e t r a s p o s t a / t r a s p o s t a = ( i n t ) malloc ( c o l o n n e s i z e o f ( i n t ) ) ; f o r ( c = 0 ; c< c o l o n n e ; c ++) t r a s p o s t a [ c ] = ( i n t ) malloc ( r i g h e s i z e o f ( i n t ) ) ; 9
10 / c a l c o l o d e l l a t r a s p o s t a / f o r ( r = 0 ; r < r i g h e ; r ++) f o r ( c = 0 ; c< c o l o n n e ; c ++) t r a s p o s t a [ c ] [ r ] = m a t r i c e [ r ] [ c ] ; / stampo l a t r a s p o s t a / p r i n t f ( " La t r a s p o s t a è : \ n " ) ; f o r ( c = 0 ; c< c o l o n n e ; c ++) f o r ( r = 0 ; r < r i g h e ; r ++) p r i n t f ("%d ", t r a s p o s t a [ c ] [ r ] ) ; p r i n t f ( " \ n " ) ; / d e a l l o c o l a m a t r i c e / f o r ( r = 0 ; r < r i g h e ; r ++) f r e e ( m a t r i c e [ r ] ) ; f r e e ( m a t r i c e ) ; / d e a l l o c o l a t r a s p o s t a / f o r ( c = 0 ; c< c o l o n n e ; c ++) f r e e ( t r a s p o s t a [ c ] ) ; f r e e ( t r a s p o s t a ) ; Esercizio 5.3 () Calcolare la trasposta di una matrice di interi allocata dinamicamente. Strutturare il programma a funzioni. Risoluzione # i n c l u d e < s t d i o. h> # i n c l u d e < s t d l i b. h> t y p e d e f i n t T Matrice ; / d i c h i a r a z i o n e d e l l e f u n z i o n i ( p r o t o t i p i ) 10
11 / void L eggirighecolonne ( i n t r, i n t c ) ; T Matrice A l l o c a M a t r i c e ( i n t r, i n t c ) ; void I n s e r i m e n t o ( T Matrice mat, i n t r, i n t c ) ; void C a l c o l a T r a s p o s t a ( T Matrice mat, T Matrice t r a s p, i n t r, i n t c ) ; void V i s u a l i z z a M a t r i c e ( T Matrice mat, i n t r, i n t c ) ; void D e a l l o c a M a t r i c e ( T Matrice mat, i n t r ) ; / programma p r i n c i p a l e / void main ( ) T Matrice m a t r i c e, t r a s p o s t a ; i n t r i g h e, c o l o n n e, r, c ; L eggirighecolonne(& r i g h e, & c o l o n n e ) ; m a t r i c e = A l l o c a M a t r i c e ( r i g h e, c o l o n n e ) ; I n s e r i m e n t o ( m a t r i c e, r i g h e, c o l o n n e ) ; p r i n t f ( " Hai i n s e r i t o l a m a t r i c e : \ n " ) ; V i s u a l i z z a M a t r i c e ( m a t r i c e, r i g h e, c o l o n n e ) ; t r a s p o s t a = A l l o c a M a t r i c e ( c o l o n n e, r i g h e ) ; C a l c o l a T r a s p o s t a ( m a t r i c e, t r a s p o s t a, r i g h e, c o l o n n e ) ; p r i n t f ( " La t r a s p o s t a è : \ n " ) ; V i s u a l i z z a M a t r i c e ( t r a s p o s t a, c o l o n n e, r i g h e ) ; D e a l l o c a M a t r i c e (& m a t r i c e, r i g h e ) ; D e a l l o c a M a t r i c e (& t r a s p o s t a, c o l o n n e ) ; / d e f i n i z i o n e d e l l e f u n z i o n i / 11
12 void L eggirighecolonne ( i n t r, i n t c ) p r i n t f ( " Quante r i g h e ha l a m a t r i c e : " ) ; s c a n f ( "%d ", r ) ; p r i n t f ( " Quante c o l o n n e ha l a m a t r i c e : " ) ; s c a n f ( "%d ", c ) ; T Matrice A l l o c a M a t r i c e ( i n t r, i n t c ) T Matrice mat ; i n t i ; mat = ( T Matrice ) malloc ( r s i z e o f ( i n t ) ) ; mat [ i ] = ( i n t ) malloc ( c s i z e o f ( i n t ) ) ; return mat ; void I n s e r i m e n t o ( T Matrice mat, i n t r, i n t c ) i n t i, j ; f o r ( j = 0 ; j <c ; j ++) p r i n t f ( " I n s e r i s c i elemento d i r i g a %d e c o l o n n a %d : ", i, j ) ; s c a n f ("%d ", & mat [ i ] [ j ] ) ; void C a l c o l a T r a s p o s t a ( T Matrice mat, T Matrice t r a s p, i n t r, i n t c ) i n t i, j ; f o r ( j = 0 ; j <c ; j ++) t r a s p [ j ] [ i ] = mat [ i ] [ j ] ; 12
13 void V i s u a l i z z a M a t r i c e ( T Matrice mat, i n t r, i n t c ) i n t i, j ; f o r ( j = 0 ; j <c ; j ++) p r i n t f ("%d ", mat [ i ] [ j ] ) ; p r i n t f ( " \ n " ) ; void D e a l l o c a M a t r i c e ( T Matrice mat, i n t r ) i n t i ; f r e e ( ( mat ) [ i ] ) ; f r e e ( mat ) ; 13
L'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 12 Corso di Informatica 2009-2010 Lezione 12 1 Allocazione dinamica della memoria La funzione calloc() La funzione calloc() alloca memoria dinamicamente. Numero
DettagliAllocazione statica della memoria
2015 - Roberta Gerboni 1 2 Allocazione statica della memoria Cosa succede nella memoria del computer quando il un programma vengono dichiarate delle variabili? memoria Ad esempio: int main() 57 { int x=
DettagliGestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
DettagliLezione IX Gestione dinamica della memoria
Programmazione e Laboratorio di Programmazione Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione: Gestione dinamica della memoria 1 Operatore sizeof() Buffer: una
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliIntroduzione al C Lez. 4
Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliINFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti
INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti Ricorsione La ricorsione è un approccio per la risoluzione
DettagliIntroduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso
Introduzione al C Lezione 4 Allocazione dinamica della memoria Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso
DettagliLezione IX Gestione dinamica della memoria
Programmazione e Laboratorio di Programmazione Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione: Gestione dinamica della memoria 1 Direttiva per il preprocessore
DettagliTitolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.
Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 15: Puntatori e stringhe Vittorio Scarano Corso di Laurea in Informatica Puntatori Relazione con gli arrays Aritmetica dei untatori Allocazione dinamica di memoria Puntatori
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliAllocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
DettagliUnità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2017/2018 Calendario delle lezioni Ogni lezione consta di una spiegazione assistita da slide,
DettagliLa gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
DettagliUso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
DettagliPuntatori. Operazioni sui puntatori Allocazione dinamica
Puntatori Operazioni sui puntatori Allocazione dinamica Puntatori a void la parola chiave void può essere usata per dichiarare dei puntatori che non puntano a nessun tipo di dato in particolare void *ptr;
DettagliStrutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.
Consideriamo l esercizio assegnato la scorsa lezione per rappresentare il libretto di uno studente. Per memorizzare i dati si sono utilizzati tre array: char* nomiesami[max ESAMI] Array dei nomi degli
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliI puntatori. DD Cap.7 pp KP Cap.6 pp
I puntatori DD Cap.7 pp.245-280 KP Cap.6 pp.219-235 Cos è un puntatore Un puntatore è una variabile che assume come valore un indirizzo di memoria. Il nome di una variabile fa quindi riferimento ad un
DettagliUnità 11 Allocazione dinamica
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 11 Allocazione dinamica S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliAllocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t))
Allocazione dinamica della memoria: malloc() In C è possibile allocare dinamicamente un area di memoria (ossia, durante l esecuzione di un programma) tramite le funzioni malloc() e calloc() (occorre includere
DettagliIntroduzione al C. Unità Gestione Dinamica della Memoria
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità Gestione Dinamica della Memoria D. Bloisi, A. Pennisi, S. Peluso, S. Salza Gestione
DettagliTipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.
Array di Tipi di dato utente Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Array di Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione
Dettaglipuntatori Lab. Calc. AA 2006/07 1
puntatori Lab. Calc. AA 2006/07 1 Attributi di un oggetto nome o identificatore; tipo; valore (o valori); indirizzo; Lab. Calc. AA 2006/07 2 Indirizzo Consideriamo la dichiarazione con inizializzazione:
DettagliProf. G. Ascia. I puntatori. Fondamenti di Informatica
I puntatori 1 Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita
DettagliAllocazione della memoria. Allocazione dinamica della memoria. Allocazione della memoria. Allocazione automatica
Allocazione dinamica della memoria Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Allocazione della memoria Il termine allocazione viene utilizzato per indicare l assegnazione di un blocco
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliAssociazione Variabile-Indirizzo
I puntatori Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliGestione della memoria
Gestione della memoria Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Allocazione di memoria A una variabile puntatore si può assegnare
DettagliL'allocazione statica: L'allocazione automatica L'allocazione dinamica:
Allocazione L'allocazione statica: e' quella con cui sono memorizzate le variabili globali e le variabili statiche, queste vengono allocate all'avvio nel segmento dati da exec, con le distizioni che abbiamo
DettagliAllocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
DettagliLezione 12: Allocazione Dinamica della Memoria
Lezione 12: Allocazione Dinamica della Memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 17 Aprile 2013 Puntatori e vettori Puntatori ed indirizzi Semplificando, la memoria di un computer
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliInformatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012
Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Igor Melatti Cenni sui puntatori in C Per ogni variabile normale dichiarata, il compilatore riserva una precisa quantità di
DettagliLISTE E RIPASSO. Sesto Laboratorio
LISTE E RIPASSO Sesto Laboratorio STRUTTURE E LISTE RIVEDIAMO LE STRUTTURE typedef struct anagrafico{ char nome[20]; int anni; char indirizzo[30]; dati; cittadino.anni = 3; dati popolazione[1000]; Scrivere
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica della variabili Dato il seguente programma C void f1(int i,double p); void main(void) { int a,v[10]; double b; fa(a,b); Void f1(int i, double p) {
Dettagli! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente
! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili
DettagliMatrici. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliPolitecnico di Milano. Strutture dati dinamiche
Politecnico di Milano Strutture dati dinamiche Strutture dati statiche e dinamiche In C le dimensioni di ogni dato sono note prima dell esecuzione Sarebbe utile avere contenitori la cui dimensione varia
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio
DettagliJAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {
JAVA C import javautil*; public static class test { private int variable; public void main (String[] args) { variable = 0; Systemoutprintln( Variable is: + variable); #include int variable; int
DettagliEsercitazioni Fondamenti di Informatica
Esercitazioni Fondamenti di Informatica Marco Biagi Esercitazione 4 Email: marco.biagi@unifi.it Bool Tipo dati che può assumere i valori true o false Contenuto nella libreria standard stdbool.h Esempio:
DettagliLezione 8: Stringhe ed array multidimensionali
Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017
DettagliProf. G. Ascia. Allocazione dinamica della memoria (2)
Allocazione dinamica della memoria (2) 1 Allocazione dinamica e funzioni Con il seguente programma si vorrebbe allocare dinamicamente un vettore all interno di una funzione (leggi_vettore) #include
DettagliStruct, enum, Puntatori e Array dinamici
Struct, enum, Puntatori e Array dinamici Tratti dal corso del Dr. Francesco Fabozzi Corso di Informatica Tipi di dato in C Abbiamo esaminato diversi tipi di dato che il C mette a disposizione dell utente
DettagliLab 12 Allocazione dinamica della memoria
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 12 Allocazione dinamica della memoria Lab17 1 Esercizio 0 Un file di testo di nome bambini.txt, contiene informazioni
DettagliDefinizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 Soluzione della prova scritta del 31 Gennaio 2006 Esercizio 1 (4 punti) Elencare i tipi di dato predefiniti del linguaggio C, precisandone il dominio e le operazioni principali
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 7 0/11/018 Esercizi sull allocazione dinamica della memoria in C 1. Cosa stampa il seguente programma? 1 #d e f i n e MAXLENGTH 0 4 typedef struct { char
DettagliMatrici. Unità 7. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliInformatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi
Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi gianluca.rossi@uniroma2.it Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)
DettagliPer quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente la loro esistenza deve essere prevista e dichiarata a priori Questo può rappresentare un problema
DettagliPuntatori. Grazie ai puntatori:
Puntatori Grazie ai puntatori: 1) è possibile permettere ad una funzione di modificare il contenuto di un area di memoria; 2) invece di passare ad una funzione tutto un blocco di memoria, si passa alla
DettagliLa programmazione nel linguaggio C. Liste
Liste È molto comune dover rappresentare sequenze di elementi tutti dello stesso tipo e fare operazioni su di esse. Esempi: sequenza di interi (23 46 5 28 3) sequenza di caratteri ( x r f ) sequenza di
DettagliL'allocazione dinamica della memoria
L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria
DettagliAllocazione Dinamica della memoria
Allocazione dinamica Allocazione Dinamica della memoria I Il C mette a disposizione delle primitive per la gestione dinamica della memoria, grazie all utilizzo di alcune funzioni messe a disposizione dalla
DettagliL'allocazione dinamica della memoria
L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria
DettagliStrutture dati dinamiche in C. Emilio Di Giacomo
Strutture dati dinamiche in C Emilio Di Giacomo Strutture dati Una struttura dati è un contenitore in cui i dati sono organizzati in maniera che possano essere recuperati e manipolati efficientemente Un
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 27 Giugno 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int i; Scrivere la porzione di codice che sostituisca
DettagliCorso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica
Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare
DettagliCapitolo 10 - Strutture
1 Capitolo 10 - Strutture Strutture In molte situazioni, una variabile non è sufficiente per descrivere un oggetto. Ad esempio, una posizione sul piano cartesiano è identificata da due coordinate, e la
DettagliAllocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
DettagliCalcolatori Ele,ronici Lezione 9 5/12/2013
Calcolatori Ele,ronici Lezione 9 5/12/2013 Introduzione al C Emiliano Casalicchio Emiliano.Casalicchio@uniroma2.it Array Puntatori Stringhe Capitolo 6 del Kelley Pohl 3 Array Stru,ura dac contenente N
DettagliVariabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free
Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in
DettagliEsercizio 2: Algebra dei Puntatori e Puntatori a Puntatori
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliStrutture. Una dichiarazione struct definisce un nuovo tipo. - Può essere seguita da una lista di variabili.
Strutture Una stuttura permette di aggregare variabili di tipo differente (a differenza degli array che rappresentano sequenze di variabili dello stesso tipo). Una dichiarazione di struttura ha la forma:
DettagliIl linguaggio C. Puntatori e Array
Il linguaggio C Puntatori e Array Puntatori I puntatori sono variabili i cui valori sono indirizzi di locazioni in cui sono memorizzate altre variabili architettura a 32 bit: 232-1 indirizzi, ma non si
DettagliIntroduzione al linguaggio C
Linguaggio C Introduzione al linguaggio C Sistemi di sviluppo integrati Noti anche come IDE: Integrated Development Environment Un pacchetto software che permette di scrivere, preprocessare, compilare,
DettagliProf.Ing.S.Cavalieri Puntatori e Heap in Linguaggio C. Puntatori e Heap
Puntatori e Heap 1.Cosa Sono i Puntatori? I puntatori sono fondamentalmente delle variabili, come quelle intere, reali e carattere. Tuttavia, l unica differenza consiste nel fatto che essi non contengono
DettagliArray. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliEsercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
DettagliArray. Aggragati di variabili omogenee...
Array Aggragati di variabili omogenee... Cosa è un array È un insieme di variabili omogenee identificato da un indice, ad esempio Se devo leggere 1 numeri dallo standard input e memorizzarli all'interno
DettagliConsideriamo un vettore allocato dinamicamente
Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero
DettagliFondamenti di Informatica 2
Fondamenti di Informatica 2 della prova scritta del 25 Luglio 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,-8,-4; int N = 7; int i; Scrivere la porzione di codice che sostituisca
DettagliQualsiasi programma in C++ segue lo schema: Variabili
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
Dettagli- matrici - stringhe - file (lettura/scrittura, di testo/binari) - strutture, puntatori - allocazione dinamica della memoria (malloc)
Esercitazione Argomenti che verranno trattati in questa esercitazione: - matrici - stringhe - file (lettura/scrittura, di testo/binari) - strutture, puntatori - allocazione dinamica della memoria (malloc)
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria Allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 Allocazione dinamica
DettagliCorso di Informatica
Corso di Informatica Modulo T4 A1 Allocazione dinamica 1 Prerequisiti Programmazione elementare Programmazione ad oggetti Dati semplici e strutturati 2 1 Introduzione In molti problemi capita di non conoscere
DettagliPuntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori
Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per
DettagliPuntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori
Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per
DettagliEsercizi di programmazione in linguaggio C English Dictionary
Esercizi di programmazione in linguaggio C English Dictionary Il file di testo wordnet.txt contiene un certo numero di parole (word) e il corrispondente significato (meaning) secondo il seguente formato:
Dettagli