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
选项完成的。
另一种选择是使用动态数组(使用malloc
或new
分配)。
编辑(感谢 Jefrrey Theobald):您还必须增加链接器中的堆栈大小,这是使用 /stack
选项完成的。也可以通过右键单击项目->属性->链接器->系统和setting stack commit
和stack 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++