Ver Mensaje Individual
  #7  
Antiguo 18-09-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
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 **dirint nFilasint nColumnas){
   
int Error=falsei;
   if(( 
dir = (int**)new (std::nothrowint*[nFilas]) == NULL){
      
Error true;
   }else{
      for ( 
0nFilasi++ ){
        if(( 
dir[i] = (int*)new (std::nothrowint[nColumnas]) == NULL )
           
Error true;
      }
   }

   if(
Error){
      
dir LiberarMemoria(dirnFilasnColumnas);
   }
   
   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 **dirint nFilasint nColumnas)
{
   
int i;

   if( 
dir != NULL ){
      for ( 
0nFilasi++ )
      {
         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?

Última edición por aguml fecha: 18-09-2015 a las 11:11:07.
Responder Con Cita