Ver Mensaje Individual
  #12  
Antiguo 16-09-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
Bueno amigos, ya tengo el codigo funcionando y va mejor de lo que pensaba jajaja. Solo tengo una duda y es que para obtener memoria y para liberarla uso unas funciones que son copias casi identicas a excepcion del tipo de retorno y del tipo de un parametro de entrada.
Aqui las funciones:
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)
         {
            
free(dir[i]);
         }
      }
    }
    
free(dir);
    
dir=NULL;

    return 
dir;
}

//Libera la memoria de un array de cadenas
char** LiberarMemoriaCadenas(char **dirint nFilasint nColumnas){
   
int i;

   if( 
dir != NULL ){
      for ( 
0nFilasi++ )
      {
         if (
dir[i] != NULL)
         {
            
free(dir[i]);
         }
      }
    }
    
free(dir);
    
dir=NULL;

    return 
dir;
}

//Obtiene memoria para almacenar un array de cadenas
char** ObtenerMemoriaCadenas(char **dirint nFilasint nColumnas){
   
int Error=falsei;
   if(( 
dir = (char**)malloc(nFilas*sizeof(char*))) == NULL){
      
Error true;
   }else{
      for ( 
0nFilasi++ ){
        if(( 
dir[i] = (char*)malloc(nColumnas)) == NULL )
           
Error true;
      }
   }

   if(
Error){
      
dir LiberarMemoriaCadenas(dirnFilasnColumnas);
   }
   
   return 
dir;
}

//Obtiene memoria para almacenar un array de punteros a enteros
int** ObtenerMemoria(int **dirint nFilasint nColumnas){
   
int Error=falsei;
   if(( 
dir = (int**)malloc(nFilas*sizeof(int*))) == NULL){
      
Error true;
   }else{
      for ( 
0nFilasi++ ){
        if(( 
dir[i] = (int*)malloc(nColumnas)) == NULL )
           
Error true;
      }
   }

   if(
Error){
      
dir LiberarMemoria(dirnFilasnColumnas);
   }
   
   return 
dir;

¿alguna manera sencilla de hacer que una funcion sirva para ambos casos al obtener memoria y otra sola funcion sirva para liberarla?
Responder Con Cita