Bueno, he estado pasandolo todo a C++Builder y la parte de la memoria dinamica me tiene mareado. Esto me funciona pero no se si hago algo mal:
Código PHP:
//Obtiene memoria para almacenar un array de punteros a enteros
int** ObtenerMemoria(int **dir, int nFilas, int nColumnas){
int Error=false, i;
if(( dir = (int**)new (std::nothrow) int*[nFilas]) == NULL){
Error = true;
}else{
for ( i = 0; i < nFilas; i++ ){
if(( dir[i] = (int*)new (std::nothrow) int[nColumnas]) == NULL )
Error = true;
}
}
if(Error){
dir = LiberarMemoria(dir, nFilas, nColumnas);
}
return dir;
}
Digamos que lo que obtengo es un array multidimensional del tipo:
Código PHP:
int dir[nFilas][nColumnas];
En la pagina de C++ con clase veo esto:
Código PHP:
//Array de diez punteros a float:
float **f=new float *[10];
//Cada elemento del array es un array de 10 float
// f es un array de 10*10
f[0][0] = 10.32;
f[9][9] = 21.39;
¿Se supone que es lo mismo que yo hago arriba pero en vez de ser de [nFilas][nColumnas] es de [nFilas][nFilas]? ¿Se puede hacer de esa misma manera lo que yo hago en mi codigo? O sea hacerlo en una sola linea especificando las dos dimensiones y en "dir" sea un puntero a nFilas punteros y que cada uno de esos punteros tenga nColumnas del tipo int.
Y para liberar memoria hago asi:
Código PHP:
//Libera la memoria de un array de enteros
int** LiberarMemoria(int **dir, int nFilas, int nColumnas)
{
int i;
if( dir != NULL ){
for ( i = 0; i < nFilas; i++ )
{
if (dir[i] != NULL)
{
delete dir[i];
}
}
}
delete dir;
dir=NULL;
return dir;
}
No se tampoco si hay algo mal pero el codigo funciona sin dar errores. La pregunta es la misma ¿se puede hacer mejor con menos codigo?