| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
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 или
неправильно понимаю их механизм работы 
|
|
|
| Вернуться к началу |
|
 |
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 и как его запустить?
Подскажите, кто знает.
|
|
|
| Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|