segmentation fault 11 in C++ on Mac

前端 未结 2 1734
闹比i
闹比i 2021-02-08 13:28

When I try to run this

int N=10000000;
short res[N];

I get segmentation fault 11

when I change to

int N=1000000;
short         


        
相关标签:
2条回答
  • 2021-02-08 13:44

    You've exceeded your stack space given by the OS. If you need more memory, the easiest way is to allocate it dynamically:

    int N=1000000;
    short* res = new short[N];
    

    However, std::vector is preferred in this context, because the above requires you to free the memory by hand.

    int N = 1000000;
    std::vector<short> res (N);
    

    If you can use C++11, you can possibly save some fraction of time by using unique_ptr array specialization, too:

    std::unique_ptr<short[]> res (new short[N]);
    

    Both of the automatic methods above can still be used with familiar res[index] syntax thanks to overloaded operator[], but to get the raw pointer for memory operations you'd need res.data() with vector or res.get() with unique_ptr.

    0 讨论(0)
  • 2021-02-08 13:47

    You can't allocate all that on the stack. Try short* res = new short[10000000]; and don't forget to clean up.

    Alternatively, you can use std::vector<short> res(10000000);

    0 讨论(0)
提交回复
热议问题