#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i,j,n,m;
   int **a; 
   
   n=5;
   m=7;
   a= (int**) calloc (n, sizeof(int*));
   if (a == NULL) { 
  		printf("E' finita la memoria");
		exit(-1);
   }
      
   for(i=0; i< n; i++){
       a[i]= (int*) calloc (m, sizeof(int));
       if (a[i] == NULL) { 
         printf("E' finita la memoria");
         // disalloco tutto cio' che ho allocato fino ad ora: a[0]...a[i-1]
         for (j=0; j<i; i++) 
            free(a[j]);
         free(a); // disalloco anche a!
         exit(-1);
      }
   }
   
   // uso la matrice 
   
   for (i=0; i<n; i++)
      free(a[i]);
   free(a);
   getchar();     
   return 0;
}