Question

I'm trying to write a word to a file using this function:

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

But I get a segmentation fault whenever it tries to run the fwrite. I looked at the man page for fwrite(3) and I feel like I used it correctly, is there something I'm missing?

Was it helpful?

Solution

Try this instead:

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);
   }
}

And why was your original function extern?

OTHER TIPS

Is the file handle valid? Did you fopen() with "w"? fwrite() will segfault if it's not.

The function itself really does nothing, so it's obviously the fwrite call that's the problem. Examine the arguments.

out does not contain the address of the file, rather it contains the address of the file pointer your passing in main. This function prototype should be like:

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

In this way you are making a double pointer to the pointer in main which is then pointing to the file.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top