gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:52 27 4
gpt4 key购买 nike

我最近换了一台新笔记本电脑 - 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com