Я говорил (может быть). Компилятор MSVS в режиме С++ (по крайней мере так было в MSVS 2008) при выполнении longjmp освобождает все объекты со стека. Там специальный список, как оказалось, создается для всех экземпляров класса на стеке.
Соответственно, рукопашная многозадачность через setjmp/longjmp не работает, ломает объекты на стеке.
Лечится выносом setjmp/longjmp в отдельный именно С-файл, чтобы шибко вумный компилятор не знал о существовании этого списка, если я правильно помню.
При классическом использовании (возврат из глубоких вложений) все работает вполне адекватно.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|