мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
c:c_ultimate_guide:setjmp.h [2025/10/31 13:15] radi0devc:c_ultimate_guide:setjmp.h [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 15: Строка 15:
   * ''setjmp(env)'' — (по простому - сохраняет точку возврата) сохраняет текущий контекст в env и возвращает 0 при прямом вызове. При последующем возвращении, инициированном longjmp, setjmp возвращает ненулевое значение, переданное в longjmp.    * ''setjmp(env)'' — (по простому - сохраняет точку возврата) сохраняет текущий контекст в env и возвращает 0 при прямом вызове. При последующем возвращении, инициированном longjmp, setjmp возвращает ненулевое значение, переданное в longjmp. 
   * ''longjmp(env, val)'' — (по простому - возвращаеться в точку возврата) восстанавливает контекст, ранее сохранённый в env, и заставляет ранее вызванный setjmp((Если функция была вызвана без соответствующего вызова setjmp(), или функция, в которой восстанавливается выполнение, уже завершилась, то поведение не определено.)) вернуться с значением val (если val == 0, оно преобразуется в 1). Выполнение продолжается как будто setjmp только что вернуло это значение.   * ''longjmp(env, val)'' — (по простому - возвращаеться в точку возврата) восстанавливает контекст, ранее сохранённый в env, и заставляет ранее вызванный setjmp((Если функция была вызвана без соответствующего вызова setjmp(), или функция, в которой восстанавливается выполнение, уже завершилась, то поведение не определено.)) вернуться с значением val (если val == 0, оно преобразуется в 1). Выполнение продолжается как будто setjmp только что вернуло это значение.
 +
 +наглядное объяснение: {{:c:c_ultimate_guide:2025-10-31_13-23.png}}
  
 Использование setjmp() и longjmp() может привести к утечкам памяти, если выделение происходит между вызовами этих функций. Использование setjmp() и longjmp() может привести к утечкам памяти, если выделение происходит между вызовами этих функций.