Страница 1 из 1

new и delete освобождение и выделение памяти

Добавлено: 25 июл 2006, 02:39
xadd
Здравствуйте.

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

Выделяем память:

char **VIRTUAL = NULL;

if (VIRTUAL == NULL)

{

VIRTUAL = new char*[50];

for (i = 0; i < 50; i++)

VIRTUAL = new char[50];

}

Освобождаем:

if (VIRTUAL != NULL)
{
for (i = 0; i < 50; i++)
delete VIRTUAL;
delete VIRTUAL;
VIRTUAL = NULL;
}

С уважением, Дмитрий.

Re: new и delete освобождение и выделение памяти

Добавлено: 25 июл 2006, 10:48
BBB
xadd, Если ты оператором new выделяешь МАССИВ (new char*[50]; new char[50]; ), то при освобождении delete-ом надо указывать, что освобождается именно массив, а не "единственный" экземпляр.

То есть, не:

Код: Выделить всё

for (i = 0; i < 50; i++) 
  delete VIRTUAL[i]; 
delete VIRTUAL;
а:

Код: Выделить всё

for (i = 0; i < 50; i++) 
   delete [] VIRTUAL[i]; 
delete [] VIRTUAL;

Добавлено: 25 июл 2006, 16:13
xadd
Спасибо.

С Уважением, Дмитрий