使用 stackoverflow 错误初始化数组

initialize array with stackoverflow error

我有简单的方法:

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

当我调用这个方法时,出现了这个错误:

Unhandled exception at 0x00007FF639E80458 in RasterizeEditor.exe: 0xC00000FD: Stack overflow (parameters: 0x0000000000000001, 0x000000AE11EB3000).

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

当您像这样创建数组时,它位于 "stack" 中,但显然您的堆栈大小不够。

你可以尝试把它放到另一个地方,比如"heap"(像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;
}

在 visual studio 中,您可以调整应用程序使用的堆栈大小。它在链接器系统下的项目属性中。

通常您不想这样做,因为它会使事情变得脆弱。多加几个功能需要回去重新调整

最好按照建议做,使用 malloc 或更好的 std::vector 来获取在堆上分配的内存。

或者,如果这样做是安全的,您可以使用静态或匿名名称空间在函数外部的文件级别声明您的数组,以确保它对文件是私有的。这里的安全意味着你的程序在任何时候只调用一次函数。