Обязательно ли удалять память при выходе?

Рейтинг: 2Ответов: 2Опубликовано: 15.04.2011

Или память будет освобождена операционной системой самостоятельно?

#include <stdio.h>

void main() {
    char *p = malloc(7);

    sprintf(p, "%s", "output");

    puts(p);
}

Обязательна ли строка

free(p);

в приведенном выше коде перед выходом из main?

Ответы

▲ 5Принят

Вся выделенная память должна быть освобождена сразу же как она станет не нужной. Это Ваша обязанность как программиста.

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

И Вы не должны перекладывать свою работу на чужие плечи, хотя многие это делают :)

▲ 2

Да. Память (не shared) после завершения процесса освобождается.

Однако хороший стиль (все подчищать самому) игнорировать не следует.

Частенько, в практическом программировании действуют методом "Copy/Paste". Код (часто не особо задумываясь) переносят из программы в программу. Если код, изначально написанный для main() попадет в библиотеку и будет вызываться в цикле...