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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
xadd
Сообщения: 3
Зарегистрирован: 25 июл 2006, 02:36

Здравствуйте.

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

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

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;
}

С уважением, Дмитрий.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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;
xadd
Сообщения: 3
Зарегистрирован: 25 июл 2006, 02:36

Спасибо.

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