c++ - 在 C 中创建数组时出现段错误

标签 c++ c arrays segmentation-fault stack-overflow

我最近换了一台新笔记本电脑 - HP dv6119tx(Intel Core i5,4 GB RAM)。它安装了 Windows 7 Home Premium 64 位。

我正在尝试在 C++(Dev C++)中创建长度为 10^6 的 int 类型的数组,我过去常常在我的最后一台笔记本电脑(32 位 Windows 7 Ultimate/Ubuntu Linux,2GB RAM)和我编程的所有其他环境(它应该需要大约 3.5 MB 的 RAM)。但是在当前设置下,我在 Debug模式下收到“段错误”错误。

Screenshot when I am trying to create an array of length 10^5

Screenshot when I am trying to create an array of length 10^6

屏幕截图(编辑):
第一个屏幕截图显示 10^5 在当前设置下工作,10^6 不在。我没有在我最后一台机器上工作的 10^6 的屏幕截图,但我已经使用了很多次。

编辑:
如果我将数组声明为 global 或在堆上动态创建它作为

,程序将正常工作
int* a = new int[MAX];  

但我无法理解的是,当本地阵列在堆栈上占用微不足道的 3.5 MB 内存时(并且在 2 GB 的机器上运行良好),为什么这个问题会出现在 4GB 的机器上?这是用户堆栈空间问题吗?可以手动增加吗?

编辑 2:
我特别问这个问题,因为我在 SPOJ 上提交了许多解决方案,在堆栈上创建了 10^6 大小的数组。使用我当前的设置,我感到无法做到这一点。只要有可能,我更喜欢堆栈而不是堆,因为它没有内存泄漏问题;和局部变量而不是全局变量,因为它们很整洁并且不会弄乱命名空间。

最佳答案

4 兆字节的堆栈相当大。 Windows 上的默认大小为 1MB。您需要使用链接器的 /STACK 选项来请求更大的大小。

关于c++ - 在 C 中创建数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7541415/

相关文章:

C++无法获得正确的字符串输入

c++ - 处理 Windows 套接字错误

c++ - 为什么 auto 的初始值设定项是引用时不是引用?

创建一个 "template"(格式)字符串

c - 将结构数组分配给另一个结构成员时类型不完整

Java 空指针异常

javascript - 带有 ng-repeat 的数组数组

python - 从字典创建多维数组 (D>5)..?

c++ - 在插槽断开时清除 ExtraSelections Qt

c - C中的文件内存泄漏