C C  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Динамическая память

Тест проверяет полный жизненный цикл выделенной памяти: безопасный расчёт размера, отказ realloc, повторное освобождение памяти, составную очистку и договорённости о владении, без которых отдельные вызовы malloc/free не образуют надёжную программу.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. Код читайте построчно: часть заданий проверяет вывод, часть — поиск дефекта, переносимость и безопасное исправление. После завершения откроются объяснения и профиль по 4 темам.
Вопрос 1 из 20
Какой вызов выделяет массив count элементов типа *p без повторения имени типа?
CC17
int *p = /* ... */;
Вопрос 2 из 20
Что нужно сделать сразу после malloc до разыменования?
CC17
struct node *n=malloc(sizeof *n);
/* следующий шаг */
Вопрос 3 из 20
Чем calloc отличается по инициализации?
Вопрос 4 из 20
Как корректно проверить умножение count*size?
CC17
void *allocate_array(size_t count, size_t size) {
    /* Сначала нужно проверить, представимо ли count * size. */
    return malloc(count * size);
}
Вопрос 5 из 20
Что гарантирует malloc(0)?
Вопрос 6 из 20
Почему `p = realloc(p,new_size)` опасно?
CC17
p=realloc(p,new_size);
if(!p) return ERROR;
Вопрос 7 из 20
Какой вариант изменения размера сохраняет исходный блок, если `realloc` вернёт `NULL`?
CБезопасное применение realloc
int *p = malloc(old_count * sizeof *p);
/* new_count * sizeof *p заранее проверено на переполнение */
Вопрос 8 из 20
Можно ли использовать старые внутренние указатели после успешного realloc?
Вопрос 9 из 20
Что гарантируется для содержимого при успешном увеличении блока через `realloc`?
CC17
int *q = realloc(p, new_count * sizeof *p);
/* рассматривается ветвь q != NULL; размер заранее проверен */
Вопрос 10 из 20
Как лучше обработать запрос capacity=0 переносимо?
Вопрос 11 из 20
Допустим ли `free(NULL)`?
CC17
int *p=NULL;
free(p);
Вопрос 12 из 20
Какое утверждение о `free` неверно?
Вопрос 13 из 20
В каком порядке уничтожать структуру с `char *name` и самим объектом?
CC17
void user_destroy(struct user *u){
 if(!u)return;
 free(u->name);
 free(u);
}
Вопрос 14 из 20
Почему `p=NULL` после free не решает проблему полностью?
CC17
int *q=p;
free(p); p=NULL;
printf("%d",*q);
Вопрос 15 из 20
Какой санитайзер компилятора лучше всего поймает обращение после освобождения памяти в воспроизводимом тесте?
Вопрос 16 из 20
Что означает borrowed pointer?
Вопрос 17 из 20
Функция принимает владение buf даже при ошибке. Что важно?
CC17
int queue_push(struct queue *q, void *owned_item);
Вопрос 18 из 20
Какой шаблон упрощает очистку при нескольких шагах создания?
CC17
resource *r=NULL; file *f=NULL;
/* шаги */
cleanup:
 close_file(f); destroy(r);
Вопрос 19 из 20
Кто освобождает строку, возвращённую как `const char *` на внутренний буфер объекта?
Вопрос 20 из 20
Как сделать передачу владения видимой в коде C?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу