I have a piece of C code where I try to write a buffer into an opened output file.I am getting a segmentation fault when I try to run the code.
if (fwrite(header, record_size, 1, uOutfile) != 1)
{
return 0;
}
The header is a properly populated and I am able to print out the contents of the header.the size of the buffer header is definitely greater than the record_size.Is there anything else worth checking.?Any other reason where fwrite can cause a segfault.Gdbing the problem gave the following output
0x00007ffff6b7d66d in _IO_fwrite (buf=0x726d60, size=16, count=1, fp=0x738820) at iofwrite.c:43
43 iofwrite.c: No such file or directory.
in iofwrite.c
it seems to suggest that the output file has not been created.how ever and ls -l on my directory shows the output file of size 0 bytes.
I would greatly appreciate if someone could throw some light on the problem.
EDIT: Code that opens the file:
outfd = open(out, O_RDWR|O_CREAT|O_TRUNC|O_LARGEFILE, 0664);
if (outfd == -1) {
dagutil_panic("Could not open %s for writing.\n", out);
}
uOutfile = fdopen(outfd, "w");
I don’t think there’s enough here to know for sure what your problems are, but here are some thoughts:
FILE *(uOutFile) and your buffer (header) — we can then see if you’re borking memory somewhere between.valgrind: You’re getting a segfault, so it could probably catch what you’re doing wrong.gdb, examine the contents of bothheaderanduOutFile(not just the pointer, but the pointed-to-memory.) (You’ll have to use some smarts to figure out ifuOutFilelooks right, but you should be able to up-or-down determine ifheaderis correct.)To add to this: my general debug strategy when I get segfaults is:
gdb‘s backtrace. Tells me where the segfault happened. Usually, this is enough to uncover the dumb thing I did.0xdeadbeef)(2 & 3 are in no particular order.)