Segmentation fault on large array sizes

后端 未结 5 1831
醉梦人生
醉梦人生 2020-11-21 04:33

The following code gives me a segmentation fault when run on a 2Gb machine, but works on a 4GB machine.

int main()
{
   int c[1000000];
   cout << \"do         


        
5条回答
  •  醉梦人生
    2020-11-21 04:54

    In C or C++ local objects are usually allocated on the stack. You are allocating a large array on the stack, more than the stack can handle, so you are getting a stackoverflow.

    Don't allocate it local on stack, use some other place instead. This can be achieved by either making the object global or allocating it on the global heap. Global variables are fine, if you don't use the from any other compilation unit. To make sure this doesn't happen by accident, add a static storage specifier, otherwise just use the heap.

    This will allocate in the BSS segment, which is a part of the heap:

    static int c[1000000];
    int main()
    {
       cout << "done\n";
       return 0;
    }
    

    This will allocate in the DATA segment, which is a part of the heap too:

    int c[1000000] = {};
    int main()
    {
       cout << "done\n";
       return 0;
    }
    

    This will allocate at some unspecified location in the heap:

    int main()
    {
       int* c = new int[1000000];
       cout << "done\n";
       return 0;
    }
    

提交回复
热议问题