Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/10/2010, 01:57
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Fallo segmentacion con fread

Ese fallo de segmentación tiene dos posibles causas:

1.- Como te dice sam90, si el archivo no existe el programa fallará. Comprueba el valor de tu variable fichero nada más abrir el archivo, si vale NULL es que ha fallado la operación de apertura, y cualquier intento de operar con ese archivo te puede provocar ese error de segmentación. Deberías poner algo así como

Código C++:
Ver original
  1. fichero = fopen(....);
  2. if (fichero == NULL)
  3. {
  4. // Tratar el fallo en la apertura
  5. }
  6. else
  7. {
  8. // Hacer el tratamiento del fichero
  9. }

2.- Cuando llamas a fread, estás pasando la dirección de la variable buffer:

fread(&buffer,....);

Ten en cuenta que buffer ya ha sido declarada como array, con lo que el nombre del array es un puntero al primer elemento. La llamada deberá ser:

fread(buffer, ...);

Si el archivo ya existía, ésta es la causa más probable del error.

Un par de comentarios adicionales:

1.- Tal como has puesto la apertura del fichero, ésta se va a hacer en modo secuencial (texto), pero luego utilizas fread, que es para acceso directo (binario).Si vas a leerlo en modo texto, utiliza fscanf, fgets, etc, o ábrelo con "rb" si vas a leerlo en modo binario.

2.- La marca de final de fichero (código ASCII 26) no tiene sentido cuando lees un fichero en modo binario, ya que puedes tener un byte con ese valor que no tenga nada que ver con el final de fichero. Lo digo porque el bucle de lectura del fichero lo controlas con la marca de fin de fichero, como secuencial (que es como lo has abierto), pero luego lo estás leyendo como binario (con fread), así no detectará el final de fichero y puede entrar un bucle infinito.