segmentation fault 11 in C++ on Mac(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()
和 vector
或 res.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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Mac 上 C++ 中的分段错误 11
基础教程推荐
- 使用从字符串中提取的参数调用函数 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01