を積み重ね、CalcのプログラムのスタックはそうなバグがK & R帳では例
#define MAXVAL 100
int sp =0; /* next free stack position */
double val[MAXVAL]; /* value stack*/
/* push: push f onto value stack */
void push(double f) {
if (sp < MAXVAL)
val[sp++] = f;
else
printf ("error: stack full, can't push%g\n",f);
}
を持っていることは、スタックオーバーフローを引き起こして1つの余分な値をプッシュすることができます。それは(sp < MAXVAL - 1)にする必要があります。 しかし、この本のような間違いを信じるのは難しいです。
'sp ++'ではなく '++ sp'です! –
接頭辞と後置増分の違いを知っていますか? – eduffy
'sp'が' 99'(つまり '* MAXVAL - 1'と等しく、' MAXVAL'よりも小さい)であるときには、それはまだ配列への有効なインデックスです。 –