Delphi 5. Учебник



         

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 и адреса возврата. Поскольку условия возврата из рекурсии нет, переполнение стека неминуемо.
    Конечно же, бесконечная рекурсия — не единственная причина возникновения ошибки такого рода, но это первое,  что стоит отследить при переполнении стека.




Содержание  Назад  Вперед