Vik*_*esh 5 c c++ stack-overflow arrays segmentation-fault
我最近迁移到了一台新笔记本电脑 - HP dv6119tx(Intel Core i5,4 GB RAM).它安装了Windows 7 Home Premium 64位.
我想创建类型的数组int在C++(开发的C++),我用于我上次膝上型(32位Windows 7最终/ Ubuntu Linux操作系统,2GB RAM)和所有其他环境我有舒适创建长度10 ^ 6的编程开(大约需要3.5 MB的RAM).但是使用当前设置,我在调试模式下出现"分段错误"错误.


屏幕截图(编辑):
第一个屏幕截图显示10 ^ 5处理当前设置而10 ^ 6不工作.我没有在我最后一台机器上运行10 ^ 6的屏幕截图,但我已多次使用它.
编辑:
如果我将数组声明为全局,或者在堆上动态创建它,程序将正常工作
int* a = new int[MAX];
Run Code Online (Sandbox Code Playgroud)
但我无法理解的是,当本地阵列在堆栈上占用少量3.5 MB内存(并且在2 GB机器上工作正常)时,为什么这个问题会出现在4GB机器上呢?这是用户堆栈空间问题吗?可以手动增加吗?
编辑2:
我特别提出这个问题,因为我已经在SPOJ上提交了许多解决方案,在堆栈上创建了10 ^ 6大小的数组.根据我目前的设置,我感到瘫痪无法做到这一点.我希望尽可能堆栈堆栈,因为它没有内存泄漏问题; 和全局变量的局部变量,因为它们很整洁并且不会弄乱命名空间.
一个4兆字节的堆栈非常大.Windows上的默认大小为1MB.您需要使用/STACK链接器选项来要求更大的尺寸.
像这样创建的数组存储在堆栈中.但是,堆栈的大小非常有限,因此您遇到堆栈溢出和崩溃.
这样做的方法是在堆上分配它:
int *a = (int*)malloc(MAX * sizeof(int));
// Do what you need to do.
// Free it when you're done using "a".
free(a);
Run Code Online (Sandbox Code Playgroud)