Pregunta

Estoy tratando de escribir una palabra en un archivo utilizando esta función:

extern void write_int(FILE * out, int num) {
   fwrite(&num,sizeof(int),1, out);
   if(ferror(out)){
      perror(__func__);
      exit(EXIT_FAILURE);
   }
}

Pero consigo un fallo de segmentación cada vez que intenta ejecutar el fwrite. Miré a la página del manual de fwrite (3) y siento que he usado correctamente, ¿hay algo que me falta?

¿Fue útil?

Solución

Pruebe esto en su lugar:

void write_int(FILE * out, int num) {
   if (NULL==out) {
       fprintf(stderr, "I bet you saw THAT coming.\n");
       exit(EXIT_FAILURE);
   }
   fwrite(&num,sizeof(int),1, out);
   if(ferror(out)){
      perror(__func__);
      exit(EXIT_FAILURE);
   }
}

Y por qué era su función original extern?

Otros consejos

¿Es válido el identificador de archivo? ¿Usted fopen () con "w"? fwrite () fallará si el no lo es.

La función en sí realmente no hace nada, por lo que es, obviamente, la llamada fwrite ese es el problema. Examinar los argumentos.

out no contiene la dirección del archivo, sino que contiene la dirección del archivo de puntero de su fallecimiento en el principal. Este prototipo de función debe ser como:

extern void write_int(FILE * & out, int num);

De esta manera usted está haciendo un doble puntero al puntero en la principal, que a continuación se señala al archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top