使用stackoverflow错误初始化数组

时间:2018-04-11 08:53:55

标签: c++ arrays visual-studio-2015

我有简单的方法:

void loadContent()
{
    int test[500000];
    test[0] = 1;
}

当我调用此方法时,会发生此错误:

  

RasterizeEditor.exe中0x00007FF639E80458处的未处理异常:   0xC00000FD:堆栈溢出(参数:0x0000000000000001,   0x000000AE11EB3000)。

我将arraysize更改为100并且一切正常......但是我需要500000个整数值,所以我该怎么办? C ++必须能够在一个数组中管理500000个int值,问题可能在其他地方吗?或者我只需要更改visual studio 2015的设置吗?

2 个答案:

答案 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来获取堆上分配的内存。

或者,如果可以安全地执行此操作,则可以使用静态或匿名命名空间在函数外部的文件级别声明数组,以确保它对文件是私有的。这里安全意味着您的程序只能在任何时候调用该函数。