I'm trying to write code that can reverse a file to make it unreadable. I did this in Python and I'm trying to do it again in C, but when I use fread to read a large file I get a segmentation fault (with files with 1 or 2 mb this doesn't happen), is there anything I can do to solve this?
I tried with this code:
#include <stdio.h>
#include <conio.h>
int main()
{
FILE *fh=fopen("vid.mp4","rb");
FILE *fh1=fopen("vid1.png","wb");
int fsize=36886031;
char data[fsize];
fread(data,fsize,1,fh); //<-- error
fwrite(data,fsize,1,fh1); //<-- error too
}
And i get:
Segmentation fault [Progam finished]
When you declare a variable inside a function like this, you're declaring it on the stack. It is big enough to hold a lot of normal variables, but it usually doesn't have enough memory to hold big arrays. If you want to store big objects, you must use
malloc.Here, I've modified your code to not crash.
I highly recommend reading about dynamic memory allocation, because it is a very important part of C language.