Как изменить размерность массива?

 
С помощью ArrayResize можно изменить размер в первом измерении массива. А что делать, если нужно изменить оба размера в двухмерном массиве? Внутри функции, в которую этот массив передается по ссылке?
 
Я как-то сделал такое.
//+------------------------------------------------------------------+
//|Запись в квазидвумерный массив                                    |
//+------------------------------------------------------------------+
int DWriteArr2(double& arr[],double data,int i,int j,int Dim1,int Dim2) {
    arr[i+j*Dim1]=data;
    return(0);   
}
//+------------------------------------------------------------------+
//|Чтение из квазидвумерного массива                                 |
//+------------------------------------------------------------------+
int DReadArr2(double& arr[],double& data,int i,int j,int Dim1,int Dim2) {
  data=arr[i+j*Dim1];
  return(0);   
}
//+------------------------------------------------------------------+
//|Изменение размеров квазидвумерного массива                        |
//+------------------------------------------------------------------+
int DResizeArr2(double& arr[],int Dim1,int Dim2) {
  int res=ArrayResize(arr,Dim1*Dim2);
  if (res <= 0) return(-1);
  else return(0);
}
 
Комментарий: Мне нужно было устанавливать размер массива один раз - исходя из параметров индикатора. Если делать аналоги "вообще", то нужно обеспечить сохранение значений при изменении размера и желательно вставить проверки на выход за границы при обращении. И наверное ещё что-нибудь :), просто я на эту тему долго не думал - цели такой не было. Но идея, думаю, понятна. А может кто-то и сделал такую библиотеку уже.
 
Спасибо. Посмотрю, но меня такой вариант, кажется, не спасет.
Причина обращения: