Q.  How to allocate a 2 dimensional array dynamically?

Ans     #include <stdlib.h> /* EXIT_FAILURE, EXIT_SUCCESS */
        #include <errno.h>
        #include <stdio.h>

        #define     ROW     5
        #define     COL     5

        int
        main ( void )
        {
            int **cont_arr;
            int **cont_arr;

            int **arr = malloc ( ROW * sizeof ( int * ) );
            if ( !arr )
            {
                perror ( "Error" );
                exit ( EXIT_FAILURE );
            }

            for ( i=0; i < ROW; i++ )
            {
                arr[i] = malloc ( sizeof ( int ) * COL );
                if ( !arr[i] )
                {
                    perror ( "Error" );
                    exit ( EXIT_FAILURE );
                }
            }

            /*
             * Contiguous memory allocated for array.  Below.
             */

            cont_arr = (int **) malloc ( ROW * sizeof ( int * ) );
            if ( !cont_arr )
            {
                perror ( "Error" );
                exit ( EXIT_FAILURE );
            }

            cont_arr[0] = (int *) malloc ( ROW * COL * sizeof ( int ) );
            if ( !cont_arr[0] )
            {
                perror ( "Error" );
                exit ( EXIT_FAILURE );
            }

            for ( int i=1; i < ROW; i++ )
                cont_arr[i] = cont_arr[0] + i * COL;

            exit ( EXIT_SUCCESS );
        }