OberonCore
https://forum.oberoncore.ru/

Ошибка при переполнении стека
https://forum.oberoncore.ru/viewtopic.php?f=2&t=1696
Страница 1 из 1

Автор:  Илья Ермаков [ Вторник, 07 Июль, 2009 23:35 ]
Заголовок сообщения:  Ошибка при переполнении стека

QWERTYProgrammer писал(а):
Вроде уже когда-то обсуждалось, но внятного объяснения так и не было, почему простейшая программа с аллокацией большого массива на стеке на 2-3 запуске может убить среду ББ?

Код:
MODULE TestCrash1;
IMPORT Log := StdLog;
CONST n=8000;
PROCEDURE Do*;
VAR a: ARRAY n,n OF REAL;
BEGIN
Log.Int(LEN(a,0)); Log.Ln;
END Do;
END TestCrash1.


Да, тут такая фигня получается. На переполнение стека ББ выдаёт стандартный системный WinApi.MessageBox. Штука в том, что всю жизнь, сколько помню, эта процедура была блокирующей, т.е. не возвращала управление до нажатия пользователем кнопки ok. Но не знаю почему (то ли начиная с XP? Я недавно перешёл, сидел на 2000-м), теперь она отдаёт управление среде. И если я не нажму кнопку OK в показанном диалоге, а продолжу работу в среде при открытом сообщении, то начинается полная фигня. В частности, фатальное падение.

Автор:  Vlad [ Среда, 08 Июль, 2009 00:18 ]
Заголовок сообщения:  Re: Ошибка при переполнении стека

Цитата:
Вроде уже когда-то обсуждалось, но внятного объяснения так и не было, почему простейшая программа с аллокацией большого массива на стеке на 2-3 запуске может убить среду ББ?


Переполнение стэка - очень специфичная ошибка и требует очень специфичной обработки (в отлчие от банального AV). Во всяком случае на винде. BB, видимо, не совсем правильно обрабатывает такую ошибку (или вообще обрабатывает по общей схеме).

Автор:  Илья Ермаков [ Среда, 08 Июль, 2009 00:58 ]
Заголовок сообщения:  Re: Ошибка при переполнении стека

Да, возможно, MessageBox не может правильно отработать в условиях переполненного стэка ББ. Надо смотреть, сейчас времени нет...

Автор:  QWERTYProgrammer [ Среда, 08 Июль, 2009 21:41 ]
Заголовок сообщения:  Re: Ошибка при переполнении стека

На моей машине (XP) происходит следующее: при первом запуске появляется окошко с сообщением "stack overflow". После нажатия ОК ББ остается наплаву, можно продолжать работать дальше. Но вот если запустить программу второй раз, то тут уже без появления каких-нибудь сообщений рушится сама среда.

Автор:  Илья Ермаков [ Среда, 08 Июль, 2009 21:47 ]
Заголовок сообщения:  Re: Ошибка при переполнении стека

Там ещё такая штука, что в Винде с какой-то версии даже при заблокированном потоке приложения (если он заблокирован АПИ-вызовом) могут проходить сообщения, что и наблюдалось с этим диалогом. Вроде так. Это вообще крах, конечно, такие фортели ОС.

Ну и ББ не согласован с этими обновлениями, видимо, при обработке переполнения. А в 1.6 ошибка возникает, у кого время проверить есть? И накатать бы баг-репорт в Цюрих.

Автор:  QWERTYProgrammer [ Среда, 08 Июль, 2009 22:10 ]
Заголовок сообщения:  Re: Ошибка при переполнении стека

У меня как раз 1.6

Автор:  Роман М. [ Вторник, 28 Май, 2013 17:33 ]
Заголовок сообщения:  Re: Ошибка при переполнении стека

Есть ли у кого-то исправление этой ошибки сегодня? Если это кому-то было нужно, конечно.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/