Tengo esta funcion:
char **combinar(char **cam, char **text, char **dat)
{
int c; /*indice de campos*/
int t = 0; /*indice de lineas en el texto*/
int i; /*indice dentro de la linea*/
int p; /*indice de chars dentro del nombre de campo*/
int x; /*largo del dato*/
char **texto = text;
char **datos = dat;
char **campos = cam;
char *campo;
char *linea1;
char *linea2;
int bufsize;
int bufsize2;
char **buffer;
char ch;
buffer = (char **)malloc(sizeof(char*) * (t + 2));
while (texto[t] != NULL)
{
linea1 = strcpy(linea1, texto[t]);
ch = *linea1;
buffer = (char **)realloc(buffer, sizeof(char*) * (t + 2));
i = 0;
bufsize = 200;
linea2 = (char *)malloc(sizeof(char) * (bufsize + 1));
while (ch != '\0')
{
if ((i + 2) >= bufsize)
{
bufsize += 20;
linea2 = (char *)realloc(linea2, sizeof(char) * (bufsize + 1));
}
while ((ch != '<') && (ch != '\0'))
{
linea2[i++] = ch;
ch = *++linea1;
}
if (ch == '<')
{
ch = *++linea1;
p = 0;
ch = *++linea1;
bufsize2 = 20;
campo = (char *)malloc(sizeof(char) * (bufsize2 + 2));
while ((ch != '>') && (ch != '\n'))
{
campo[p++] = ch;
ch = *++linea1;
}
if (ch == '\n')
{
fprintf(stderr, "Error en el formato del texto\n");
exit(0);
}
else
{
campo[p] = '\0';
c = buscarcampo(campos, campo); /*retorna el indice del dato a reemplazar*/
free(campo);
if (c == -1)
fprintf(stderr, "ERROR, campo %s no encontrado", campo);
else
{
x = strlen(datos[c]);
linea2[i] = '\0';
i = (i + x);
bufsize += (x + 5);
linea2 = (char *)realloc(linea2, sizeof(char) * (bufsize + 2));
linea2 = strcat(linea2, datos[c]);
}
}
*++linea1;
ch = *++linea1;
}
}
linea2[i] = '\0';
buffer[t] = (char *)malloc((strlen(linea2) + 1) * sizeof(char));
buffer[t] = strcpy(buffer[t], linea2);
free(linea2);
free(linea1);
t++;
}
buffer = (char **)realloc(buffer, sizeof(char*) * (t + 2));
buffer[t] = NULL;
return buffer;
}
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