Ver Mensaje Individual
  #12 (permalink)  
Antiguo 08/07/2016, 05:00
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: ¿Se puede optimizar el siguiente codigo?

Jajaja.
Lo más urgente ahora es resolver el problema que tengo al reservar la memoria para volcar el archivo. Lo otro cuando funcione esto ya veremos si hay que llamar a los artificieros para que no explote el pc jijiji.
He hecho esta modificacion porque he leido que si falla realloc se produciria una fuga de memoria como yo lo estaba haciendo y que habia que usar un puntero auxiliar asi que asi lo he dejado:
Código C:
Ver original
  1. void LiberarMemoria(char ***buffer,int nlines)
  2. {
  3.     int index;
  4.  
  5.     if(buffer != NULL && *buffer != NULL){
  6.         for(index=0;index < nlines;index++)
  7.             free(*buffer[index]);
  8.         free(*buffer);
  9.     }
  10. }
  11. //---------------------------------------------------------------------------
  12.  
  13. int CargarFicheroEnMemoria(FILE *origen, char *path,char ***pbuffer)
  14. {
  15.     int nlines=0,largo;
  16.     char aux[SIZEMAX];
  17.     char **paux;
  18.  
  19.     origen=fopen(path,"r");
  20.  
  21.     if(origen != NULL){
  22.         *pbuffer=NULL;
  23.         while(!feof(origen)){
  24.             memset(aux,'\0',SIZEMAX);
  25.             fgets(aux,SIZEMAX,origen);
  26.             largo=strlen(aux);
  27.             nlines++;
  28.             paux=(char**)realloc(*pbuffer,nlines*sizeof(char**));
  29.             if(paux != NULL){
  30.                 *pbuffer=paux;
  31.                 *pbuffer[nlines-1]=(char*)malloc(sizeof(char*)*largo);
  32.                 strcpy(*pbuffer[nlines-1],aux);
  33.             }else{
  34.                 printf("No hay suficiente memoria disponible para volcar el archivo.\n");
  35.                 LiberarMemoria(pbuffer,nlines-1);
  36.             }
  37.         }
  38.     }
  39.     return nlines;
  40. }
Sigue teniendo el mismo fallo y es porque no hago bien el trabajo de punteros y no se que hago mal al respecto. ¿podeis ayudarme?

Última edición por aguml; 08/07/2016 a las 06:09