Tengo un problema que no sé muy bien cómo solucionar.
Tengo que leer un fichero cuya primera línea es algo tal que así:
3 eth0 eth1 eth2
El 3 es el número de interfaces de red, y ehti cada una de ellas.
En mi programa tengo una función que lee la primera línea del fichero, descartando los espacios (en caso de que los hubiere) y yendo directamente a por el número de interfaces, tras lo cual crea una tabla dinámica (char **) que contendrá tantas cadenas (char*) como dicte el número leído (el número de interfaces).
Pues bien, la primera vez me la lee perfectamente: eth0.
Tras eso, calculo el tamaño (4), creo una tabla de ese tamaño (4), libero la tabla con la que leí la primera interfaz (tamaño 1024, ya que es el máximo posible) y pongo el puntero a NULL:
tamRealInterfaz=strlen(auxiliar);
interfaces[counter]=(char)malloc(tamRealInterfazsizeof(char));
strcpy(interfaces[counter],auxiliar);
free(auxiliar);
auxiliar=NULL;
Tras realizar esto, se supone que me tendría que liberar los 1024 caracteres que auxiliar tenía reservados y ponérmelo a NULL.
Pues bien, ahora vuelvo al principio del bucle (hace esto tantas veces como interfaces haya), hago:
auxiliar=(char)malloc(1024sizeof(char));
Y en lugar de reservarme espacio vacío, me asigna el mismo que tenía reservado antes y lleno de cosas que no he metido yo (se puede ver con el gdb que hay algo de /381 /219 /21 /124... muy raro todo).
No sé qué hago mal, si es lógico que salga esto o si hay algún error en el código.
La cosa es que la función hace lo que quiero que haga, incluso sigue leyendo la segunda interfaz, pero cuando hago STRLEN de nuevo, me dice que el tamaño es 8 en lugar de 4 (eth1).
A ver si alguien me puede echar un cable porque estoy bastante liado con esto.
Gracias. Siento la longitud de la explicación pero quería que quedase lo más claro posible (y no sé si he conseguido esto último).
RPV: Tengo que hacer una lectura de caracteres de un fichero, reservo memoria de tamaño predeterminado, leo el fichero, copio la tabla en otra que sí tiene el tamaño justo de lo que he leído (para no desperdiciar memoria), libero la tabla "grande", la predeterminada, y después la pongo a NULL para evitar líos. Al volver a reservar con esa variable tipo char* , en lugar de hacerlo como la primera vez (me asigna un espacio vacío de memoria) lo hace mandando al puntero a la misma zona de memoria reservada al principio y que ahora está llena de mierda que ha metido el free /i.
¿qué hago mal xD