• Domingo 15 de Diciembre de 2024, 08:32

Autor Tema:  Se Cuelga En Return  (Leído 1178 veces)

Master-Blaster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Se Cuelga En Return
« en: Sábado 15 de Julio de 2006, 03:17 »
0
Tengo esta funcion:


Código: Text
  1. char **combinar(char **cam, char **text, char **dat)
  2. {
  3.      
  4.      int c; /*indice de campos*/
  5.      int t = 0; /*indice de lineas en el texto*/
  6.      int i; /*indice dentro de la linea*/
  7.      int p; /*indice de chars dentro del nombre de campo*/
  8.      int x; /*largo del dato*/
  9.      char **texto = text;
  10.      char **datos = dat;
  11.      char **campos = cam;
  12.      char *campo;
  13.      char *linea1;
  14.      char *linea2;
  15.      int bufsize;
  16.      int bufsize2;
  17.      char **buffer;
  18.      char ch;
  19.      buffer = (char **)malloc(sizeof(char*) * (t + 2));
  20.      
  21.      while (texto[t] != NULL)
  22.      {
  23.            linea1 = strcpy(linea1, texto[t]);
  24.            ch = *linea1;
  25.            buffer = (char **)realloc(buffer, sizeof(char*) * (t + 2));
  26.            i = 0;
  27.            bufsize = 200;
  28.            linea2 = (char *)malloc(sizeof(char) * (bufsize + 1));
  29.            while (ch != '\0')
  30.            {
  31.                  if ((i + 2) >= bufsize)
  32.                  {
  33.                     bufsize += 20;
  34.                     linea2 = (char *)realloc(linea2, sizeof(char) * (bufsize + 1));
  35.                  }
  36.                  
  37.                  while ((ch != '<') && (ch != '\0'))
  38.              {
  39.                    linea2[i++] = ch;
  40.                    ch = *++linea1;
  41.                  }
  42.                  
  43.              if (ch == '<')
  44.              {
  45.                 ch = *++linea1;
  46.                 p = 0;
  47.                 ch = *++linea1;
  48.                 bufsize2 = 20;
  49.                 campo = (char *)malloc(sizeof(char) * (bufsize2 + 2));
  50.                 while ((ch != '>') && (ch != '\n'))
  51.                 {
  52.                     campo[p++] = ch;
  53.                     ch = *++linea1;  
  54.                     }
  55.                     if (ch == '\n')
  56.                     {
  57.                            fprintf(stderr, "Error en el formato del texto\n");
  58.                            exit(0);
  59.                     }
  60.                     else
  61.                     {
  62.                         campo[p] = '\0';
  63.                         c = buscarcampo(campos, campo); /*retorna el indice del dato a reemplazar*/
  64.                         free(campo);
  65.                         if (c == -1)
  66.                            fprintf(stderr, "ERROR, campo %s no encontrado", campo);
  67.                         else
  68.                         {
  69.                           x = strlen(datos[c]);
  70.                           linea2[i] = '\0';
  71.                           i = (i + x);
  72.                           bufsize += (x + 5);
  73.                           linea2 = (char *)realloc(linea2, sizeof(char) * (bufsize + 2));
  74.                           linea2 = strcat(linea2, datos[c]);
  75.                         }
  76.                     }
  77.                     *++linea1;
  78.                     ch = *++linea1;
  79.                  }
  80.               }
  81.               linea2[i] = '\0';
  82.               buffer[t] = (char *)malloc((strlen(linea2) + 1) * sizeof(char));
  83.               buffer[t] = strcpy(buffer[t], linea2);
  84.               free(linea2);
  85.               free(linea1);
  86.               t++;
  87.            
  88.      }
  89.  
  90.      buffer = (char **)realloc(buffer, sizeof(char*) * (t + 2));
  91.      buffer[t] = NULL;
  92.      
  93.      
  94.      return buffer;
  95.      
  96.      
  97.      
  98. }
  99.  

que hace todo bien, pero se cuelga en "return buffer;"!!!!!!! Me tiene loco, no le encuentro el sentido a que se cuelgue ahi... buffer esta bien guardado, porque tengo una funcion "imprimir_texto(texto)", y si hago imprimir_texto(buffer) me lo imprime perfectamente!

A la funcion la llamo asi:

char **textocomb;

textocomb = combinar(campos, texto, datos);

y no pasa de ahi :(

Alguien sabe donde puede estar el problema? Muchisimas gracias

inforsystem

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Se Cuelga En Return
« Respuesta #1 en: Miércoles 19 de Julio de 2006, 04:46 »
0
Hola

Podes utilizar:

....

return(*buffer);

.....

Me parece que como estas utilizando doble referencia...entonces... :huh:

saludos

Master-Blaster

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Se Cuelga En Return
« Respuesta #2 en: Miércoles 19 de Julio de 2006, 04:59 »
0
No, ya lo resolvi, no alocaba memoria para linea1, y por eso se colgaba cuando queria salir de la funcion  :huh: