История изменений
Исправление quasimoto, (текущая версия) :
stack_pointer -= size;
Так push(10005000) откатит стек на 10005000 (> 1024 * 1024) uint-ов и запишет (куда-то) 10005000 (то есть SIGSEGV). Лучше так (и сигнатуры другие):
#define STACK_TYPE int
#define STACK_SIZE (1024 * 1024)
STACK_TYPE stack[STACK_SIZE], *sp = stack;
void push(STACK_TYPE);
STACK_TYPE * pop(void);
inline void push(STACK_TYPE x) { assert(sp < stack + STACK_SIZE); *sp++ = x; }
inline STACK_TYPE * pop(void) { assert(sp > stack); return --sp; }
Исходная версия quasimoto, :
stack_pointer -= size;
Так push(10005000) откатит стек на 10005000 (> 1024 * 1024) int-ов и запишет (куда-то) 10005000 (то есть SIGSEGV). Лучше так (и сигнатуры другие):
#define STACK_TYPE int
#define STACK_SIZE (1024 * 1024)
int stack[STACK_SIZE], *sp = stack;
void push(STACK_TYPE);
STACK_TYPE * pop(void);
inline void push(STACK_TYPE x) { assert(sp < stack + STACK_SIZE); *sp++ = x; }
inline STACK_TYPE * pop(void) { assert(sp > stack); return --sp; }