INTRODUZIONE ALLA PROGRAMMAZIONE IN C



Malloc



La funzione malloc viene comunemente utilizzata soprattutto per "conquistare" una funzione di memoria. Viene definita con l'istruzione: char *malloc(int number_of_bytes) Questa funzione ritorna un puntatore a carattere che corrisponde al punto di inizio in memoria della porzione riservata di dimensione "number_of_bytes". Se la memoria richiesta non puo' essere allocata, ritorna un puntatore nullo. Cosi': char *cp; cp = malloc(100); tenta di riservare 100 bytes ed assegna l'indirizzo di inizio a "cp". Se si vuole avere un puntatore ad un altro tipo di dato, si deve utilizzare la coercizione. Inoltre solitamente viene utilizzata la funzione sizeof() per specificare il numero di bytes: int *ip; ip = (int *) malloc(100*sizeof(int)); Il comando (int *) simboleggia la coercizione ad un pointer integer. La coercizione per correggere il tipo dei puntatori e' molto importante per garantire che i puntatori aritmetici vengano rappresentati correttamente. E' buona norma utilizzare sizeof anche nel caso in cui si sia gia' a conoscenza della dimensione reale necessaria; questo garantisce codici portabili (device independent). "sizeof" puo' essere usata per trovare la dimensione di un qualsiasi tipo di dato, variabile o struttura; e' possibile farlo semplicemente passando uno di questi come argomento alla funzione. Cosi': int i; struct COORD {float x,y,z}; typedef struct COORD PT; sizeof(int), sizeof(i), sizeof(struct COORD) e sizeof(PT) sono tutti accettabili. Nell'esempio che segue possiamo utilizzare il collegamento tra pointer e array per trattare la memoria riservata come un array, per poter cioe' fare cose come: ip[0] = 100; oppure: for(i=0;i<100;++i) scanf("%d",ip++);