I get a segfault from this line of code:
int fatblob[1820][286][5];
Why is that?
int fatblob[1820][286][5];
you are trying to allocate a memory location of 180*286*5*4 (let size of int = 4) that is around 9.8 MB, so there is a possibility of having lesser default stack size on your OS.
LINUX has 8192 KB(i.e. 8 MB) of stack size. So obviously you will be getting a stack overflow if you are trying to allocate more memory on stack.
You can try changing the stack size of your OS. In LINUX you can try ulimit
ulimit -s < whateversize you want it to be>
like
$ ulimit -s 1024
I hope it will help you.
Because stack overflows. Try to allocate that array on the heap.
Automatic variables (the default type) in C are usually allocated on the stack. The stack is a memory region allocated per thread, and while it may grow on many operating systems, it always has a limited size. danben's answer covers the default stack pretty well, but if you're using threads, you're allocating new ones in thread creation (e.g. pthread_attr_setstacksize). In general, large allocations are better done on the heap (malloc/new), but even that may be too small sometimes. mmap() or similar sometimes help then.
Where did danben's answer go? It linked to some information on stack limits.
You're trying to allocate 1820 * 285 * 5 * sizeof(int)
bytes = about 10MB (if sizeof(int) == 4
). That's probably more bytes than your OS gives you for stack allocation by default, so you get a stack overflow/segfault.
You can fix this by either asking for extra stack when you create the thread, allocating on the heap, or changing the OS defaults.
Because your stack segment is smaller then 1820*285*5
int
s. It's usually in a neighborhood of 1MB.