Операция delete

Когда память, выделенная под переменную, больше не нужна, ее следует освободить. Делается это с помощью оператора delete:

delete имя_указателя;

Примеры.

delete ps;

Повторное применение оператора delete к тому же самому указателю приведет к зависанию программы. Рекомендуется при освобождении памяти присваивать связанному с ней указателю нулевое значение. Повторный вызов оператора delete для нулевого указателя пройдет безболезненно для программы, например,

char *pc;

pc = new char;

*pc = 'a';

delete pc;

pc = NULL;

delete pc;

При освобождении памяти с самим указателем ничего не происходит и его можно снова использовать, присвоив ему новый адрес.

При невнимательной работе с указателями может возникнуть эффект утечки памяти. Это происходит, если указателю присваивается новое значение, а память, на которую он ссылался, не освобождается. Каждый раз, когда в программе используется оператор new, за ним должен следовать оператор delete.

Пример утечки памяти.

int *pi = new int; // Выделение памяти для хранения переменной типа int

*pi=72; // В выделенную память записывается значение 72

pi = new int; // Выделение новой области памяти

*pi =84; // Запись в новую область значения 84

После выполнения этих операторов память, содержащая значение 72, оказывается недоступной, поскольку указателю на эту область было присвоено новое значение. В результате невозможно ни использовать, ни освободить зарезервированную память до завершения программы (когда вся выделенная память освобождается автоматически).

Пример выделения, использования и освобождения динамической памяти.

#include <stdio.h>

int main()

{

int a=5;

int * pa = &a;

int *pheap = new int; // Выделение памяти под целую переменную

*pheap = 7;

printf(“a=%d, *pa =%d, *pheap=%d \n”, a, *pa, *pheap);

delete pheap; // Освобождение памяти, выделенной оператором new

pheap =pa; // Присвоение указателю нового значения

printf(“ *pheap=%d \n”, *pheap);

return 0;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: