'Why do I get a segfault in C from declaring a large array on the stack?
I get a segfault from this line of code:
int fatblob[1820][286][5];
Why is that?
Solution 1:[1]
Because your stack segment is smaller then 1820*285*5 ints. It's usually in a neighborhood of 1MB.
Solution 2:[2]
Because stack overflows. Try to allocate that array on the heap.
Solution 3:[3]
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.
Solution 4:[4]
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.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | el.pescado - нет войне |
| Solution 3 | |
| Solution 4 | Community |
