Учебник по Delphi 4


Stack Overflow



Переполнение стека (stack overflow) — ошибка, появляющаяся в 32-битовом приложении гораздо реже, чем в 16 битовом, так как размер стека в этом случае существенно больше. Практически есть только один путь получить эту ошибку в Delphi 4 — попасть в бесконечную рекурсию. Например, приведенная ниже функция неминуемо должна вызвать переполнение стека.

    function BlowTheStack(I: Integer); Integer;


    var J: Integer;


    begin


        J:= 2;


        Result:= BlowTheStack(I*J);


    end;

    Каждый раз при рекурсивном вызове в стеке резервируется место для локальной переменной J и адреса возврата. Поскольку условия возврата из рекурсии нет, переполнение стека неминуемо.


    Конечно же, бесконечная рекурсия — не единственная причина возникновения ошибки такого рода, но это первое,  что стоит отследить при переполнении стека.



Содержание раздела