04.06.2008 | 22:12:22
immagine
Ing. Emanuele Scapin

C, allocazione dinamica della memoria
  • Istruzioni per l'allocazione dinamica della memoria.

    #include<stdlib.h>
    
    void *calloc(size_t size)
    
    //Alloca size byte nello heap. La memoria viene inizializzata a 0.
    
    //La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM.
    
    void *malloc(size_t size)
    
    //Alloca size byte nello heap. La memoria non viene inizializzata.
    
    //La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM.
    
    void *realloc(void *ptr, size_t size)
    
    //Cambia la dimensione del blocco allocato all'indirizzo ptr portandola a size.
    
    //La funzione restituisce il puntatore alla zona di memoria allocata in caso di successo e NULL in caso di fallimento, nel qual caso errno assumerà il valore ENOMEM.
    
    void free(void *ptr)
    
    //Disalloca lo spazio di memoria puntato da ptr.
    
    //La funzione non ritorna nulla e non riporta errori.
            
  • Primo esempio di allocazione. Allocazione dinamica di un int.

    	#include<stdio.h>
    
    	int main()
    	{
    		int *ptr_one;
    
    		ptr_one = (int *)malloc(sizeof(int));
    
    		if (ptr_one == 0)
    		{
    			printf("ERROR: Out of memory\n");
    			return 1;
    		}
    
    		*ptr_one = 25;
    		printf("%d\n", *ptr_one);
    
    		free(ptr_one);
    
    		return 0;
    	}
            
  • Secondo esempio di allocazione. Allocazione dinamica di una struct definita tramite typedef.

    	#include<stdio.h>
    
    	typedef struct rec
    	{
        		int i;
        		float PI;
        		char A;
    	}RECORD;
    
    	int main()
    	{
        		RECORD *ptr_one;
    
        		ptr_one = (RECORD *) malloc (sizeof(RECORD));
    			
    			if (ptr_one != NULL) {
    			
        		  (*ptr_one).i = 10;
        		  (*ptr_one).PI = 3.14;
        		  (*ptr_one).A = 'a';
    
        		  printf("First value: %d\n",(*ptr_one).i);
        		  printf("Second value: %f\n", (*ptr_one).PI);
        		  printf("Third value: %c\n", (*ptr_one).A);
    
        		  free(ptr_one);
    			}
        		return 0;
    	}
            
  • Terzo esempio di allocazione. Allocazione dinamica di una struct.

    	#include<stdio.h>
    
    	struct rec
    	{
        		int i;
        		float PI;
        		char A;
    	};
    
    	int main()
    	{
    		struct rec *ptr_one;
    		ptr_one =(struct rec *) malloc (sizeof(struct rec));
    
    		    ptr_one->i = 10;
        		ptr_one->PI = 3.14;
        		ptr_one->A = 'a';
    
        		printf("First value: %d\n", ptr_one->i);
        		printf("Second value: %f\n", ptr_one->PI);
        		printf("Third value: %c\n", ptr_one->A);
    
        		free(ptr_one);
    
       		return 0;
    	}
            

© Emanuele Scapin 2009-2015

 

Valid HTML 4.01! Valid CSS!