Задачи модуля "Объекты и ссылки": от указателей до утечек памяти

Модуль "Объекты и ссылки" • урок 7 из 7 • ~10 минут

Суть урока. Практика - критерий истины. В этом уроке собраны проверочные вопросы и практическая задача на анализ работы с указателями.

Теоретические вопросы

В чем принципиальное отличие статических объектов от динамических в контексте времени их жизни?

Какие две основные задачи в первую очередь решает ссылочный тип данных (указатель)?

Что описывается на функциональном уровне абстракции структуры данных?

Задача: Анализ кода с указателями

Внимательно изучите следующий фрагмент кода на языке C.

#include <stdio.h>
#include <stdlib.h>

void process() {
    int *a = (int*)malloc(sizeof(int));
    int *b = (int*)malloc(sizeof(int));
    
    *a = 10;
    *b = 20;
    
    a = b;
    *a = 30;
    
    printf("b = %d\n", *b);
    
    free(a);
    free(b);
}
Разбор: что произошло в памяти
Две ошибки работы с памятью: утечка первого объекта после присваивания a = b и двойное освобождение одного блока вызовами free(a) и free(b)
Указатель a теряет объект 10, а free вызывается дважды для одного блока

Определите, что выведет программа и есть ли в ней фундаментальная ошибка.

Как вам урок? Спасибо за отзыв!