I am attempting to compile and run a test C program in Xcode. This program reads 5 symbols from a text file and closes it. The program builds successfully, but when I try to run the program I get the error: GDB: Program received signal: “EXC_BAD_ACCESS” around fclose(in).
#include <iostream>
#include <unistd.h>
int main (int argc, const char * argv[])
{
bool b;
char inpath[PATH_MAX];
printf("Enter input file path :\r\n");
std::cin >> inpath;
FILE *in = fopen(inpath, "r+w");
char buf[5];
fread(&buf,sizeof(buf),5,in);
printf(buf);
fclose(in);
return 0;
}
What could be a cause of this?
Ah!
sizeof(buf)will return 5, so you’re asking for 25 bytes in a 5-byte buffer. This overwrites auto storage and clobbersin.And, of course, note that
fprint(buf)will be attempting to print a buffer with no terminating null, so it will print garbage beyond the end of what was read.