#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. ランタイム スタックにはどのような情報が格納されますか?