• Viernes 15 de Noviembre de 2024, 00:37

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.


Mensajes - Master-Blaster

Páginas: [1]
1
C/C++ / Re: Se Cuelga En Return
« en: Miércoles 19 de Julio de 2006, 04:59 »
No, ya lo resolvi, no alocaba memoria para linea1, y por eso se colgaba cuando queria salir de la funcion  :huh:

2
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

3
C/C++ / Re: Problemita Con Codigo
« en: Jueves 29 de Junio de 2006, 00:56 »
Ya que nadie contesta voy a seguir con mis avances :P

El caracter de salida si me lo toma.. pero tambien sale si hago dos enters seguidos, y si pongo el caracter de salida en una linea con otros caracteres me dice "escriba el caracter de salida en una linea nueva", como yo quiero que haga, pero no espera que se haga, sale igual.
Ah, y cuando hago imprimir_texto con la funcion

Código: Text
  1. void imprimir_texto(char **texto)
  2. {
  3.      int i = 0;
  4.      while (texto[i] != NULL)
  5.      {
  6.            printf("%s", texto[i]);
  7.            i++;
  8.      }  
  9. }
  10.  
me imprime cualquier cosa... por lo que supongo que estoy guardando mal el texto..

por favor, necesito ayuda urgente :(


EDIT: el problema esta en como paso "linea" como parametro a getlin, porque si imprimo "linea" dentro de getlin la imprime bien, pero si la imprimo dentro de ingresar_texto imprime cualquier cosa..

4
C/C++ / Re: Problemita Con Codigo
« en: Miércoles 28 de Junio de 2006, 23:01 »
Ya lo solucione, tenia que hacer buffer = malloc antes de hacerle realloc :P
ahora el problema es que no me toma el caracter de salida, lo tengo definido asi

#define FINTEXTO 'ç'

5
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]