#include <stdio.h>

int **realloc_2D(int **old_2d_array, size_t xalt, size_t yalt,
                size_t xneu, size_t yneu)
{
 int **neu_2d_array;
 int *p;
 size_t row;

 /*Benötigen wir Speicherplatz?..........*/
 if( xneu*yneu*sizeof(**neu_2d_array)>
     xalt*yalt*sizeof(**old_2d_array))
    /*Wir reservieren Speicher........*/
    neu_2d_array=realloc(old_2d_array, xneu*yneu*sizeof(**neu_2d_array));

 else
   neu_2d_array=old_2d_array;

 if(neu_2d_array == NULL)
  return NULL;
 else
  {
   for(row=xalt, p=(int *)neu_2d_array+xneu; row<xneu; row++, p+=yneu)
    neu_2d_array[row]=p;
  }

 return neu_2d_array;
}

int **malloc_2D(size_t x, size_t y)
{
 int **array_2d;
 int *p;
 size_t row;

 array_2d=malloc(x*y*sizeof(**array_2d));
 if(array_2d == NULL)
  return NULL;
 else
  {
   for(row=0, p=(int *)array_2d+x; row<x; row++, p+=y)
    array_2d[row]=p;
  }
 return array_2d;
}


int main()
{
 int **array;
 int i, j, total=0, row=4, col=7;
 int morerow=4, morecol=12;
 int value1=111;
 int value2=333;

 array=malloc_2D(row,col);
 if(array==NULL)
  {
   fprintf(stderr, "Kein Speicher für das 2D-Array bekommen......\n");
   exit(0);
  }

 for(i=0; i<row; i++)
  for(j=0; j<col; j++)
   array[i][j]=value1;

 array=realloc_2D(array,row,col,morerow,morecol);
 if(array==NULL)
  {
   fprintf(stderr, "Kein Speicher für das 2D-Array bekommen......\n");
   exit(0);
  }

 for(i=0; i<morerow; i++)
  for(j=col; j<morecol; j++)
   array[i][j]=value2;

  for(i=0; i<morerow; i++)
   for(j=0; j<morecol; j++)
     printf("array[%d][%d]=%d\n",i,j,array[i][j]);

 return 0;
}

