Опять про удаление памяти

 
Начать новую тему   Ответить на тему    Список форумов Borland X Portal   ООП, C++, STL Версия для печати
Предыдущая тема :: Следующая тема  
Автор Сообщение
kardinal
Посетитель
Посетитель


Зарегистрирован: 16.10.2008
Сообщения: 43

Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения: Опять про удаление памяти 
  Добавлено: Сб Фев 13, 2010 9:43
Ответить с цитатой

Вопрос по new-delete
Переменные глобальные:
Код:

char **s =NULL;
//Обработанные данные
char **Wx=NULL;
char **Wx1=NULL;
char **Wy=NULL;
char **Wz=NULL;
char **Ax=NULL;
char **Ay=NULL;
char **Az=NULL;
char **T_Wxy=NULL;
char **T_Wxz=NULL;
char **T_Ax=NULL;
char **T_Ay=NULL;
char **T_Az=NULL;
float **M=NULL;
float *A=NULL;

Выделяю в обработчике память через new , в другом обработчике удаляю через delete:
Код:

s = new char *[Len];
M=new float *[Len];
Wx = new char *[Len];
Wx1 = new char *[Len];
Wy = new char *[Len];
Wz = new char *[Len];
Ax = new char *[Len];
Ay = new char *[Len];
Az = new char *[Len];
T_Wxy = new char *[Len];
T_Wxz = new char *[Len];
T_Ax = new char *[Len];
T_Ay = new char *[Len];
T_Az = new char *[Len];
for (int i=0;i<Len;i++) s[i]= new char[120];
for (int i=0;i<Len;i++) M[i]= new float[12];
for (int i=0;i<Len;i++) Wx[i]= new char[10];
for (int i=0;i<Len;i++) Wx1[i]= new char[10];
for (int i=0;i<Len;i++) Wy[i]= new char[10];
for (int i=0;i<Len;i++) Wz[i]= new char[10];
for (int i=0;i<Len;i++) Ax[i]= new char[10];
for (int i=0;i<Len;i++) Ay[i]= new char[10];
for (int i=0;i<Len;i++) Az[i]= new char[10];
for (int i=0;i<Len;i++) T_Wxz[i]= new char[10];
for (int i=0;i<Len;i++) T_Wxy[i]= new char[10];
for (int i=0;i<Len;i++) T_Az[i]= new char[10];
for (int i=0;i<Len;i++) T_Ax[i]= new char[10];
for (int i=0;i<Len;i++) T_Ay[i]= new char[10];
......
......
delete []s;
delete Wx,Wy,Wz,Ax,Ay,Az,Wx1,T_Wxy,T_Wxz,T_Ax,T_Ay,T_Az,M,A,Predel;

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

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nuzhny
Модератор
Модератор


Зарегистрирован: 23.02.2004
Сообщения: 2339
Откуда: Ставрополь
Статус: Сейчас на форуме!
Очки: 1010
СообщениеЗаголовок сообщения:  
  Добавлено: Сб Фев 13, 2010 13:42
Ответить с цитатой

Ты неправильно используешь new/delete.
P.S. Код просто ужасен.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kardinal
Посетитель
Посетитель


Зарегистрирован: 16.10.2008
Сообщения: 43

Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Сб Фев 13, 2010 17:45
Ответить с цитатой

Nuzhny писал(а):
Ты неправильно используешь new/delete.

А можете пояснить, как правильно.
P.S. Согласен насчет кода

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nuzhny
Модератор
Модератор


Зарегистрирован: 23.02.2004
Сообщения: 2339
Откуда: Ставрополь
Статус: Сейчас на форуме!
Очки: 1010
СообщениеЗаголовок сообщения:  
  Добавлено: Сб Фев 13, 2010 19:50
Ответить с цитатой

Надо delete использовать также как ты используешь new, но в обратном порядке: что последним создал, то первым удалил. Если ты выделяешь память под массив, то у далять её надо как массив. Например:
Код:
Wx = new char *[Len]; //Создали массив
for (int i=0;i<Len;i++)
    Wx[i]= new char[10]; //Опять массив
.......................................
for (int i=0;i<Len;i++)
    delete []Wx[i]; //Удалили массив
delete []Wx; //Удалили массив


P.S. В С++ уже не принято использовать динамические массивы в таком "голом" виде. Открой для себя STL или любую другую библиотеку контейнеров.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kardinal
Посетитель
Посетитель


Зарегистрирован: 16.10.2008
Сообщения: 43

Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Сб Фев 13, 2010 20:20
Ответить с цитатой

Большое спасибо за ясный ответ улыбка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kardinal
Посетитель
Посетитель


Зарегистрирован: 16.10.2008
Сообщения: 43

Статус: Отсутствует на форуме
Очки: 0
СообщениеЗаголовок сообщения:  
  Добавлено: Вс Фев 14, 2010 7:04
Ответить с цитатой

Еще вопрос по этой теме: как работать с Code Guard и как его запустить?
Подскажите, кто знает.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Borland X Portal   ООП, C++, STL Часовой пояс: GMT +3:00
Страница 1 из 1
Перейти:  

 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах




Rambler's Top100
Rambler's Top100
[ Страница создана за 0.180911 секунд ] :: [ Произведено 19 запросов ] :: [ GZIP compression enabled ]