Mac 上 C++ 中的分段错误 11 [英] segmentation fault 11 in C++ on Mac

查看:25
本文介绍了Mac 上 C++ 中的分段错误 11的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试运行时

int N=10000000;
short res[N];

我得到分段错误 11

当我换成

int N=1000000;
short res[N];

效果很好

推荐答案

您已超出操作系统提供的堆栈空间.如果需要更多内存,最简单的方法是动态分配:

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];

但是,在这种情况下,std::vector 是首选,因为上述要求您手动释放内存.

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);

如果你可以使用 C++11,你也可以通过使用 unique_ptr 数组特化来节省一些时间:

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]);

由于重载了 operator[],上述两个自动方法仍然可以与熟悉的 res[index] 语法一起使用,但要获取内存操作的原始指针你需要 res.data()vectorres.get()unique_ptr.

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.

这篇关于Mac 上 C++ 中的分段错误 11的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆