Visual Studio C/C++ 数组大小未处理的异常堆栈溢出 [重复]

Posted

技术标签:

【中文标题】Visual Studio C/C++ 数组大小未处理的异常堆栈溢出 [重复]【英文标题】:Visual Studio C/C++ Array Size Unhandled exception Stack overflow [duplicate] 【发布时间】:2012-12-14 09:30:16 【问题描述】:

可能重复:What is a stack overflow error?

当我声明大小为 4096*1024 的大型数组时会发生这种情况

First-chance exception at 0x01382e97 in nsfclient.exe: 0xC00000FD: Stack overflow.
Unhandled exception at 0x01382e97 in nsfclient.exe: 0xC00000FD: Stack overflow.

我应该怎么做才能在 Visual Studio 中声明大数组?

【问题讨论】:

【参考方案1】:

您应该显式增加堆栈大小,以便能够在堆栈上存储更大的数组。据我所知,这是使用/F 选项完成的。

另一种选择是使用动态数组(使用mallocnew 分配)。

编辑(感谢 Jefrrey Theobald):您还必须增加链接器中的堆栈大小,这是使用 /stack 选项完成的。也可以通过右键单击项目->属性->链接器->系统和setting stack commitstack reserve size来设置此选项。

【讨论】:

来自:social.msdn.microsoft.com/Forums/en-US/Vsexpressvc/thread/… 您可能还想使用/stack 或在 GUI 的链接器配置中更改链接器中的选项 @JeffreyTheobald 谢谢。我忘了提这个:) 添加到答案中。 cool 默认是1MB 我应该如何在 Visual Studio 2015 中使用 /F?【参考方案2】:

您没有显示任何代码,但我认为您正在堆栈上声明您的数组。尝试在堆上声明它(使用malloc)。请确保稍后free

char* bigArray = malloc(LARGE_SIZE);
/* use bigArray */
free(bigArray);

【讨论】:

什么告诉你 malloc 使用堆栈?该标准没有具体说明,这是一个误导性信息。 我想你误会了。我建议 OP 当前在堆栈上有一个大数组,应该通过使用 malloc 分配数组内存来将其移动到堆上动态分配。即使用 malloc 会将数组移动到堆中。 ant 这也是错误的,AFAIK 在整个 C++ 标准中都没有对堆栈和堆的引用,您能否显示对执行您所写内容的 malloc 描述的引用? @user1824407 首先,这是关于 C,而不是关于 C++。其次:问题不在于标准,而在于特定的编译器。 该问题被标记为 visual-studio-2010,这强烈暗示 OP 正在 Windows 上运行。假设所有版本的 Windows 都使用堆进行动态分配似乎并非不合理(这是MSDN docs 的暗示,previous SO question 也同意这一点)。

以上是关于Visual Studio C/C++ 数组大小未处理的异常堆栈溢出 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 C++:malloc()/HeapAlloc 总是为最小的分配大小分配新页面

如何在 Visual Studio 2005 中禁止警告 4200?

Visual Studio 2017在首次运行时未显示编译异常

给宇宙最强Visual Studio Code配置编译和运行C/C++

给宇宙最强Visual Studio Code配置编译和运行C/C++

使用 Visual C++ 编译器 (Visual Studio 2010) 的可变数组大小出错。如何规避这个问题?