#include <stdio.h>
int doHello(){
doHello();
}
int main(){
doHello();
printf("\nLeaving Main");
return 0;
}
当您运行此程序时,程序将退出,而不会在屏幕上打印消息“Leaving Main”。这是堆栈溢出的情况,由于哪个程序正在终止,但我在命令窗口上看不到任何错误消息。(在 Windows/Cygwin/ 上运行)
Q1。我没有在 doHello 函数中声明任何局部变量,但仍在使用堆栈。这是因为
- 返回值
- 存储有关函数调用的信息?
澄清
Q2。如何在你的程序中调试这种情况?我不是要调试我上面提到的无限循环。
例如:
#define SIZE 512*1024
void doOVerflow(){
char str[SIZE];
doHello();
}
void doHello(){
char strHello[256]; // stack gets filled up at this point
doNothing(); // program terminates and function doNothing does not get called
}
编辑:
Q3。什么信息存储在运行时堆栈中?