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

void init_matrix ( double** m, unsigned n )
{
    int i, j;
	for ( i = 0; i < n; i++ )
	{
		for ( j = 0; j < n; j++ )
		{
			m[i][j] = n;
		}
	}
}

void display_matrix ( double** m, unsigned n )
{
	int i, j;
	for ( i = 0; i < n; i++ )
	{
		for ( j = 0; j < n; j++ )
		{
			printf ("%3.0lf", m[i][j] );
		}
		putchar('\n');
	}
	putchar('\n');
}

void free_matrix ( double** m, unsigned n )
{
	int i;
	for ( i = 0; i < n; i++ )
		free ( m[i] );
	free ( m );
}

int main(void)
{
	double** M = NULL;
	const int nmax = 10;
	int i, n;

	for ( n = 1; n <= nmax; n++ )
	{
		M = realloc(M, n*sizeof(double*));
		for ( i = 0; i < n - 1; i++ )
		{
			M[i] = realloc(M[i], n*sizeof(double));
		}
		M[n-1] = malloc(n*sizeof(double));

		init_matrix(M, n);
		display_matrix(M, n);
	}
		
	free_matrix ( M, nmax );
	system("pause");
	return 0;
}