SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: zany_666 en Jueves 15 de Abril de 2010, 12:39
-
Hola, quería preguntaros si veis algún error en la siguiente instrucción:
while (fscanf(punteroF
,"%s %s %s",aux
[0],argv.
fIn,argv.
fOut) != EOF
){ //Trato de cada línea
}
Lo que quiero hacer es leer hasta final de fichero línea a línea. Este fichero tiene en cada línea 3 palabras separadas por espacios. Leo la primea cadena y la guardo en la primera variable, leo la segunda, tras el espacio y la guardo en la segunda... y así con la tercera
punteroF es de tipo FILE, y es el valor devuelto al hacer un fopen() (que hace correctamente)
argv.fIn y argv.fOut son cadenas de caracteres (char cadena[100];)
aux[0] es la primera posición de una variable declarada como char *aux[2];
Mi problema es que al hacer está instrucción mi programa me da un fallo de segmentación, alguien podría ayudarme?
Gracias por adelantado :hola:
-
estas reservando la memoria para aux[0]?
aux[0] = (char *)malloc(sizeof(char)*X); //X es la cantidad de elementos a reservar
Saludos
-
aux[0] es la primera posición de una variable declarada como char *aux[2];
Fallo de segmentación indica corrupcion de memoria.
Dices que tienes declarada una variable como char *aux[2], (osea, un puntero a char).
Yo creo que puede ser una de dos cosas:
1. No le has asignado espacio de memoria a la variable mediante malloc o new, el que tu declares una variable como puntero a char no significa que el compilador automaticamente asigne espacio, al declarar la variable como char * solo estas asignando espacio para el apuntador, mas no estas asignando espacio para el lugar donde apunta el apuntador, no se si me explique. Como no asignas espacio, el apuntador apunta a cualquier parte, y entonces al querer guardar algo en la variable, corrompes la memoria
2. Si solo asignaste espacio para 2 caracteres, y la cadena que lees tiene mas de 2, entonces seguira leyendo el resto de datos, corrompiendo la memoria. Ademas recuerda que las cadenas requieren un caracter nulo al final de la cadena, si tu cadena tiene longitud de 2, necesitas en realidad espacio para 3, 2 y el caracter nulo de fin de cadena. Si tu cadena tiene longitud 3, necesitas espacio para 4, y as sucesivamente.
-
Hola, muchas gracias por las respuestas.
He probado con:
aux
[0] = (char *)malloc(sizeof(char)*X
);
Y ya no aparece fallo de segmentación :D
Me ha resultado muy extraño, pues tenía otro programa parecido y no tenia que reservar memoria con malloc. :hola: