use*_*744 8 c++ visual-studio-2010
我正在使用Visual Studio 2010编译我的程序中的堆栈溢出.我有一个宏,在do-while块中,使用在堆栈上分配的小字符数组(8 KiB)执行一些与字符串相关的工作.然后我有一个函数,我在同一范围内多次使用此宏.现在我得到堆栈溢出.
我假设堆栈分配是do-while块的本地,因此当块结束时,数组将不再存在,因此不会影响函数的整体堆栈使用,但看起来我错了.
使用调试器我能够看到在进入函数时,调用了_chkstk().作为此函数的参数,堆栈大小略大于该函数中宏的每次调用的所有8个KiB数组的总和(由于其他局部变量略大).
我用一个简单的例子重新创建了这个问题:
void func(void)
{
{char a[500000];}
{char b[500000];}
{char c[500000];}
{char d[500000];}
{char e[500000];}
}
Run Code Online (Sandbox Code Playgroud)
在一个简单的控制台应用程序中,从main()调用此函数将导致堆栈溢出.但是除去一个块语句之外的所有语句都可以正常运行.
我想知道这是否按预期工作?
如何计算函数所需的总堆栈大小?如何计算函数所需的堆栈大小?即使在超出范围之后,堆栈上的数组仍然会影响函数的总堆栈大小?
为什么我在收到堆栈溢出时
归档时间: |
|
查看次数: |
223 次 |
最近记录: |