• Viernes 15 de Noviembre de 2024, 00:25

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Master-Blaster

Páginas: [1]
1
C/C++ / Se Cuelga En Return
« en: Sábado 15 de Julio de 2006, 03:17 »
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

2
C/C++ / Problemita Con Codigo
« en: Miércoles 28 de Junio de 2006, 22:39 »
Hola, soy nuevo aca (en realidad me registre porque mañana tengo que entregar un trabajo para la facultad jeje)
La idea del codigo este es que se ingrese un texto desde teclado, y se guarde en un array de strings. El problema es que cuando ingreso una linea, el programa se cuelga. Que estoy haciendo mal? alguna alocacion de memoria?
ayudaaaaa!!!!!!!!
gracias de antemano :)

EDIT: aclaracion, estoy usando Dev-C++ con Win XP

Código: Text
  1. char **ingresar_texto(int *cantidadlineas)
  2. {
  3.  
  4.   char **buffer;
  5.   char *linea;
  6.   int a, i = 1;
  7.  
  8.   
  9.   while ((a = getlin(linea)) != 0)
  10.   {
  11.     if (a == -1)
  12.     {
  13.       fprintf(stderr, "la linea ingresada es demasiado grande. No sera tomada en cuenta\nContinue ingresando el texto:\n");
  14.       
  15.     }
  16.     else
  17.     {
  18.             buffer = (char **)realloc(buffer, i * sizeof(char *)); /*aloca otra linea*/
  19.             buffer[i-1]= (char *)malloc(strlen(linea)); /*aloca lugar para la linea en el texto*/
  20.       strcpy(buffer[i-1], linea); /*copia la linea al texto*/
  21.       i++;
  22.       free(linea);
  23.     }
  24.   }
  25.   buffer = (char **)realloc(buffer, sizeof(char *) * i );
  26.     buffer[i-1] = NULL;  
  27.     *cantidadlineas = i - 1;
  28.  
  29.  
  30.   return buffer;
  31. }
  32.  
  33.  
  34. int getlin(char *linea) /*lee una linea desde teclado*/
  35. {
  36.  
  37.   char ch;
  38.   int i = 0;
  39.   int bufsize = MAX_CHAR;
  40.   linea = (char *)malloc(sizeof(char) * (bufsize + 1));
  41.  
  42.   while (((ch = getchar()) != '\n') && (ch != FINTEXTO) && (i < MAX_CHAR))
  43.   {
  44.         linea[i] = ch;
  45.     i++;
  46.   }
  47.   if (ch == '\n')
  48.   {
  49.     linea[i] = ch;
  50.     linea[i+1] = '\0';
  51.     return i;
  52.   }
  53.   else if (ch == FINTEXTO) /*caracter de salida*/
  54.   {
  55.     if (i > 0)
  56.     {
  57.     fprintf(stderr, "escriba el caracter de salida en una linea nueva");
  58.     linea[i] = '\n';
  59.     linea[i+1] = '\0';
  60.     return i;
  61.     }
  62.     else {
  63.     return 0;
  64.     }
  65.   }
  66.   else if (i >= MAX_CHAR)
  67.   {
  68.          return -1;
  69.          }
  70.   else
  71.   {
  72.     fprintf(stderr, "ERROR!");
  73.     exit(0);
  74.   }
  75. }
  76.  

Páginas: [1]