Bueno, empiezo explicando el problema.
Supongamos que tengo un fichero de entrada con texto. De ahí necesito guardar todas las palabras distintas en un array, sin que se repitan. Creo que está bastante claro pero pongamos un ejemplo práctico.
Si la primera línea fuera: "Hola que tal adiós hola pepe tal", en el array debería guardar, por este orden: Hola, que, tal, adiós, pepe.
El problema en mi código es que pese a que la búsqueda y tal la hace correctamente, acaba petando por un sitio o por otro porque debo estar realocando mal el tamaño, me imagino. Ayer me petaba al guardar un elemento, hice unos cambios y me petaba al acceder a un elemento, y ahora mismo estoy en el punto en que me peta al hacer los free().
Así que no me enrrollo más y os dejo el código relevante, a ver si veis algo mal o tenéis una manera mejor de hacerlo (la verdad es que yo me complico de forma exagerada para cualquier chorrada).
// Declarados globalmente
int num_lineas = 0;
char **constantes;
char **valores;
constantes[0] = (char*)malloc(40*sizeof(char));
valores[0] = (char*)malloc(80*sizeof(char));
// En una función que se llama desde la que contiene los malloc de arriba:
if (num_lineas == 0)
num_lineas++;
escribir_cte = false;
for (int j=0; j<num_lineas; j++) {
if (strcmp(valores[j], result) == 0)
j = num_lineas;
else {
if (j == num_lineas-1) {
constantes = (char**)realloc(constantes, num_lineas * sizeof *constantes);
valores = (char**)realloc(valores, num_lineas * sizeof *valores);
constantes[num_lineas] = (char*)malloc( 40*sizeof(char));
valores[num_lineas] = (char*)malloc(80*sizeof(char));
valores[j] = result;
escribir_cte = true;
num_lineas++;
j = num_lineas;
}
}
}
// De nuevo en la función de los primero malloc
for (int i=0; i<num_lineas; i++) {
free(constantes[i]);
free(valores[i]);
}
free(constantes);
free(valores);
No sé si me habré dejado algo por copiar. En realidad como veis son dos arrays pero bueno, es irrelevante, el procedimiento es prácticamente el mismo para ambos. A ver qué se os ocurre. Gracias.