【问题标题】:segmentation fault 11 in C++ on MacMac 上 C++ 中的分段错误 11
【发布时间】:2013-10-31 13:53:07
【问题描述】:

当我尝试运行时

int N=10000000;
short res[N];

我得到分段错误 11

当我换成

int N=1000000;
short res[N];

效果很好

【问题讨论】:

标签: c++ segmentation-fault


【解决方案1】:

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

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

但是,std::vector 在这种情况下是首选,因为以上要求您手动free 内存。

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

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

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

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

【讨论】:

    【解决方案2】:

    您不能在堆栈上分配所有内容。试试short* res = new short[10000000];,别忘了清理一下。

    或者,您可以使用std::vector&lt;short&gt; res(10000000);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-26
      • 2017-07-30
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多