Здравствуйте.
Во многих примерах программирования после использования переменная или массив освобождается (free freeandnil и т.д.).
Обязательно ли это делать или при закрытии программы вся память освобождается сама?
Освобождение переменных из памяти
Модератор: Модераторы
При завершении приложения система (ОС) сама освободит память.
Mr.Smart писал(а):При завершении приложения система (ОС) сама освободит память.
Освободит.
Но. Например, вы захотите использовать свой кусок кода еще раз, куда-то его скопируете и при этом напрочь забудете, что память вы не освобождали, потому что - см. выше.
Потом будете долго искать, где у вас память бесследно исчезает.
Поэтому, лучше все таки освободить самостоятельно, а не полагаться на действия компилятора.
Дело не столько в копировании, сколько в повторном исполнении участка кода с локальными переменными-указателями на выделенную память. Если не освобождать выделенную память, на каждый вызов x будут утекать 2Мб, если внутри есть код, бросающий исключения, без try/finally утечка сохраняется в случае исключения.
Код: Выделить всё
Procedure x;
Var p: PChar;
Begin
GetMem(p, 2048*1024);
...
Free(p);
End;
