MQL5 dll (MSVC8) 2dim array and double pointer
//+------------------------------------------------------------------+
//| Filling the array with values (double pointer) DP |
//+------------------------------------------------------------------+
_DLLAPI void __stdcall fnFillArray2DP(int arr[][COL],const int arr_size)
{
int i,j;
//--- check input variables
if(arr==NULL || arr_size<1) return;
//--- fill array with values
int **ptr2;
ptr2=new int*[arr_size];
for ( i = 0 ; i < arr_size ; i++)
ptr2[i]= new int[COL];
for ( i = 0 ; i < arr_size ; i++)
ptr2[i] = (int *)arr + i * COL;
for( i=0;i<arr_size;i++)
for( j=0;j<COL;j++)
ptr2[i][j]=i;
for ( i = 0 ; i < arr_size ; i++)
delete[] ptr2[i];
delete[] ptr2;
/*
int i,j;
int *aux[arr_size];
int **ptr2;
ptr2 = (int **)aux;
for ( i = 0 ; i < arr_size ; i++)
aux[i] = (int *)arr + i * COL;
for( i=0;i<arr_size;i++)
for( j=0;j<COL;j++)
**ptr2=i;
*/
}
////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <exception>
using namespace std;
template<class T>
bool create_matrix(T*** const ptr, const unsigned int &x, const unsigned int &y){
try{
*ptr = new T*[x];
}
catch(bad_alloc){
return false;
}
T* memory_pool;
try{
memory_pool = new T[x*y];
}
catch(bad_alloc){
delete [](*ptr);
return false;
}
for(int i=0;i<x;i++){
(*ptr)[i] = memory_pool;
memory_pool+=y;
}
return true;
}
template<class T>
bool delete_matrix(T*** const ptr){
delete [](*ptr)[0];
delete [](*ptr);
return true;
}
int main(){
int** ptr;
create_matrix<int>(&ptr, 10, 10);
delete_matrix<int>(&ptr);
return 0;
}