Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / немогу очистить пямять / 18 сообщений из 18, страница 1 из 1
14.11.2006, 10:22
    #34125983
Programister0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
а точнее корректно удалить массив массивов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  long **x;  
  
  x=new long*[ 1000 ];
  for(int i= 0 ;i< 1000 ;i++)
  {
    x[i]=new long[ 1000 ];
    for(int j= 0 ;j< 1000 ;j++)
      x[i][j]= 102 ;         //присваиваю всем элементам пока одно значение
  } 

  
  for(int j= 0 ;j< 1000 - 1 ;j++)
    delete [] x[j];        //до этого момента программа работает нормально
  delete [] x; 

  
вообще весь этот x удалить можно
...
Рейтинг: 0 / 0
14.11.2006, 10:46
    #34126081
AsPiro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
Programister0а точнее корректно удалить массив массивов
...
вообще весь этот x удалить можно
Код: plaintext
for(int j= 0 ;j< 1000 - 1 ;j++) // Зачем отнимаете  1 ?
...
Рейтинг: 0 / 0
14.11.2006, 10:47
    #34126087
AsPiro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
Programister0а точнее корректно удалить массив массивов
...
вообще весь этот x удалить можноИ что вообще не получается сделать? Какие ошибки? В какой среде разработки?
...
Рейтинг: 0 / 0
14.11.2006, 11:57
    #34126440
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
Programister0а точнее корректно удалить массив массивов
Код: plaintext
1.
2.
  long **x;  
...
  
вообще весь этот x удалить можно
Одна из целей Страуструпа было отказаться от двойной косвенности. Он нашел изящное решение: классы, конструкторы, деструкторы.
В результате код С++ всегда внятен ( ) и управляем.
Вот вся твоя программа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
struct Long1000
{ long* x;
   Long1000(){x=new long[ 1000 ];}
  ~Long1000(){delete [] x;}
  void Set(long v){for(int i= 0 ;i <  1000 ;++i) x[i]=v;}
};
Long1000 *x=new Long1000[ 1000 ];
for(int i= 0 ;i <  1000 ;++i)
  x[i].Set( 102 );
delete [] x;
  
Нет никаких массивов массивов. Нет место для Почему?
Возникает правда вопрос: Зачем нужен этот код, если он ничего не выдает наружу?
...
Рейтинг: 0 / 0
14.11.2006, 12:23
    #34126591
Programister0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
пишу на CBuilder 6.0

ОПАньки ошибочка
вообще первый код работает нормально
но когда закидываю его в классы
начинаются ошибки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class cls1
{
  public:
    long **x;
    cls1();
    ~cls1();
};

cls1::cls1()
{
  x=new long*[ 1000 ];    //точно также выделяется память
  for(int i= 0 ;i< 1000 ;i++)
  {
    x[i]=new long[ 1000 ];
    for(int j= 0 ;j< 1000 ;j++)
      x[i][j]= 102 ;         
  }
}

cls1::~cls1()
{
  //и точно также она очищается
  for(int j= 0 ;j< 1000 ;j++)  //по идее должно быть так
    delete [] x[j];            // но все равно неработает
  delete [] x;
}

все тоже самое но на деструкторе программа останавливается

а комрилятор запускает и говорит всё нормально
...
Рейтинг: 0 / 0
14.11.2006, 12:31
    #34126638
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
хм... у меня работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
#include <stdio.h>
//extern "C" int printf(const char *, ...);
class cls1
{
  public:
    long **x;
    cls1();
    ~cls1();
};

cls1::cls1()
{
  x=new long*[ 1000 ];    //точно также выделяется память
  for(int i= 0 ;i< 1000 ;i++)
  {
    x[i]=new long[ 1000 ];
    for(int j= 0 ;j< 1000 ;j++)
      x[i][j]= 102 ;         
  }
}

cls1::~cls1()
{
  //и точно также она очищается
  for(int j= 0 ;j< 1000 ;j++)  //по идее должно быть так
    delete [] x[j];            // но все равно неработает
  delete [] x;
  printf("всё пучком");
}

int main(void)
{
 cls1 c;
 return  0 ;
}
вс2003
...
Рейтинг: 0 / 0
14.11.2006, 12:54
    #34126752
Programister0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
to maXmo
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int main(void)
{
 cls1 c;
 //так и у меня работает 
 //а ты здесь попробуй деструктор вызвать
 c.~cls1();
 return  0 ;
}
...
Рейтинг: 0 / 0
14.11.2006, 13:05
    #34126793
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
что мне, жить надоело? Деструктор вызывается при выходе из мейна, это можно наблюдать по строке, выплюнутой в консоль принтфом.
...
Рейтинг: 0 / 0
14.11.2006, 13:06
    #34126803
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
как вариант
Код: plaintext
1.
2.
3.
4.
5.
int main(void)
{
 cls1 *c=new cls1();
 delete c;
 return  0 ;
}
...
Рейтинг: 0 / 0
14.11.2006, 13:34
    #34126953
Programister0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
благодарю за вариант
...
Рейтинг: 0 / 0
14.11.2006, 14:19
    #34127228
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
pandrewОдна из целей Страуструпа было отказаться от двойной косвенности. Он нашел изящное решение: классы, конструкторы, деструкторы.
В результате код С++ всегда внятен ( ) и управляем.
У СтраусТрупа () случайно не надётся шаблончика для гипер-куба с произвольными параметрами? А то как-то жестко получается...

С уважением
mayton
...
Рейтинг: 0 / 0
14.11.2006, 14:30
    #34127298
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
maytonУ СтраусТрупа () случайно не надётся шаблончика для гипер-куба с произвольными параметрами? А то как-то жестко получается...Размерность какая?
...
Рейтинг: 0 / 0
14.11.2006, 15:18
    #34127530
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
pandrewРазмерность какая?

Хех... произвольная конечно!
...
Рейтинг: 0 / 0
14.11.2006, 15:39
    #34127610
zzzzzzzzzzz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
mayton pandrewРазмерность какая?

Хех... произвольная конечно!

Если правильно понял вопрос про гиперкуб, то как вариант решения:

typedef vector<int> TCoord;
typedef map<TCoord, int> THypercube;
...
Рейтинг: 0 / 0
14.11.2006, 18:05
    #34128256
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
zzzzzzzzzzzЕсли правильно понял вопрос про гиперкуб, то как вариант решения:

typedef vector<int> TCoord;
typedef map<TCoord, int> THypercube;

Неа.

pandrew...
Не напрягайтесь. Мне не нужен гиперкуб. Это я так... сказал. Чтобы внимание акцентировать на изящных и не очень изящных решениях.

Спасибо что мысль поняли.
...
Рейтинг: 0 / 0
15.11.2006, 10:50
    #34129340
pandrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
maytonНе напрягайтесь. Мне не нужен гиперкуб. Это я так... сказал. Чтобы внимание акцентировать на изящных и не очень изящных решениях.

Спасибо что мысль поняли.
Не переживай, я сильно не напрягался, я понял, что тебе надо было на углу отметку оставить.
Я под изящным понимаю нечто доставляющее мне эстетическое удовольствие, Гиперквадрат твой не из этой серии.
...
Рейтинг: 0 / 0
27.01.2007, 14:18
    #34287219
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
maXmo
for(int j=0;j<1000;j++) //по идее должно быть так
delete [] x[j]; // но все равно неработает
delete [] x;
printf("всё пучком");
[/src]вс2003

прошу извинить меня за неполное понимание принципа работы delete[], но этот код точно удаляет весь ТРЕХмерный массив? Ведь таким же образом обычно удаляется ДВУмерный, не нужен ли ещё один внешний цикл?
...
Рейтинг: 0 / 0
27.01.2007, 14:21
    #34287222
Zhenek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
немогу очистить пямять
ИЗВИНЯЮСЬ, недосмотрел объявление массива, мне показалось что он трехмерный
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / немогу очистить пямять / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]