Перейти до змісту

ЛР6. Час життя і висячі вказівники: аналіз коду

Коротко про роботу

Ви аналізуєте короткий фрагмент із блоками та вказівниками на локальні об’єкти. Варіант визначає STUDENT_X.

Відкрити робочий зошит Як виконувати лабораторні

1. Умова

Ви аналізуєте короткий фрагмент із блоками та вказівниками на локальні об’єкти.

Усі обчислення виконуйте з даними свого STUDENT_X. Значення варіанта друкує перша комірка зошита.

2. Що треба знати

Робота виконується після Л1–Л3. Потрібні поняття:

  1. локальна область видимості
  2. час життя об’єкта
  3. розіменування вказівника
  4. висячий стан і невизначена поведінка

Межа матеріалу

Використовуйте поняття, вивчені до Л1–Л3. Не використовуйте new, delete, unique_ptr або інші засоби, яких ще не було в лекціях.

3. Варіант, вхідні дані та результат

У зошиті заповніть STUDENT_NAME, STUDENT_GROUP і STUDENT_X від 1 до 30.

Вхідні дані

Поле Зміст
archetype номер схеми фрагмента
outer_value значення зовнішнього об’єкта
inner_value значення внутрішнього об’єкта
starter_code фрагмент для аналізу

Поля результату

Поле Зміст
final_access_safe чи безпечний фінальний доступ
unsafe_line_number номер небезпечного рядка або 0
safe_result результат після безпечного виправлення

Назви полів результату не змінюйте.

4. Терміни і правила

Терміни

  • час життя об’єкта — період від створення об’єкта до його знищення.
  • висячий вказівник — вказівник, що зберіг адресу об’єкта, час життя якого вже завершився.

Правила

  1. starter_code є повною умовою для аналізу коду. Мітки R1, R2, ... позначають рядки для відповіді.
  2. final_access_safe має значення true, коли фінальний доступ звертається до живого об’єкта.
  3. unsafe_line_number дорівнює номеру небезпечного фінального рядка; для безпечного фрагмента використовуйте 0.
  4. safe_result — значення, яке має отримати мінімальне безпечне виправлення зі збереженням задуму фрагмента.

5. Завдання

Завдання 1

Прочитайте starter_code. Позначте, де починається і закінчується час життя кожного локального об’єкта.

Завдання 2

Визначте, чи безпечний фінальний доступ. Запишіть final_access_safe і unsafe_line_number.

Завдання 3

Виправте фрагмент так, щоб не було доступу через висячий вказівник. Запишіть результат у safe_result.

6. Перевірка і здача

  1. Запустіть самоперевірку та виправте помилки.
  2. Перезапустіть ядро і виконайте роботу ще раз від початку.
  3. Збережіть .ipynb і PDF з кодом та результатами.

Назва PDF: LR06_Прізвище_Група_VNN.pdf.