我有简单的方法:
void loadContent()
{
int test[500000];
test[0] = 1;
}
当我调用此方法时,会发生此错误:
RasterizeEditor.exe中0x00007FF639E80458处的未处理异常: 0xC00000FD:堆栈溢出(参数:0x0000000000000001, 0x000000AE11EB3000)。
我将arraysize更改为100并且一切正常......但是我需要500000个整数值,所以我该怎么办? C ++必须能够在一个数组中管理500000个int值,问题可能在其他地方吗?或者我只需要更改visual studio 2015的设置吗?
答案 0 :(得分:1)
当您创建这样的数组时,它位于“堆栈”中,但显然您的堆栈大小是不够的。
你可以尝试将它放到另一个地方,比如“堆”(动态内存分配,如malloc),如:
#include <stdlib.h>
#include <stdio.h>
void loadContent()
{
int *test = malloc(sizeof(int) * 500000);
if (!test) {
fprintf(stderr, "malloc error\n");
exit(1);
}
test[0] = 1;
}
答案 1 :(得分:1)
在visual studio中,您可以调整应用程序使用的堆栈大小。它位于链接器系统下的项目属性中。
一般来说,你不想这样做,因为它会使事情变得脆弱。添加更多功能,您需要返回并再次调整。
最好按照建议做,并使用malloc或更好的std :: vector来获取堆上分配的内存。
或者,如果可以安全地执行此操作,则可以使用静态或匿名命名空间在函数外部的文件级别声明数组,以确保它对文件是私有的。这里安全意味着您的程序只能在任何时候调用该函数。