Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/65: Рейтинг темы: голосов - 65, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
1

Создание, уничтожение и очистка памяти от динамического массива

24.03.2016, 09:46. Показов 12665. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Создаю динамический массив, задаю размерность через SetLength(). Очищаю через присвоение каждому элементу массива значения nil.
Создаю его опять... и так несколько раз, а приложение все больше и больше ест оперативки. Как правильно очищать занятую память?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  
  field : array of array of integer;
 
  ....
 
  //освобождаем ранее созданное поле
  if field <> nil then
    begin
      for i := 0 to High(field) do
        field[i] := nil;
      field := nil;
    end;
  //создаем новое поле
  SetLength(field, sizeField);
  for i := 0 to High(field) do
    begin
      SetLength(field[i], sizeField);
    end;

Upd: Хотел тему создать в разделе "Delphi - для начинающих", а создал почему то в разделе посвященному С++. Как перенести тему? Помогите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2016, 09:46
Ответы с готовыми решениями:

Создание, Очистка, Уничтожение Форм
Всем снова Здравствуйте! Спасибо Всем кто ответил в предыдущих моих темах! Снова Возникли ...

Уничтожение динамического массива
Пишу на чистом C. Создаю динамический массив: double *x = malloc(n * sizeof(double)); Потом...

Очистка динамического массива
Ребят помогите разобраться откуда проблема , Выводит все правильно но после закрытия программы...

Очистка динамического массива
сколько уже изучаю c# и до сих пор так и не узнал как очищать, выденную под динамические массивы,...

10
Объявлятель переменных
1220 / 406 / 320
Регистрация: 24.09.2011
Сообщений: 1,274
24.03.2016, 13:03 2
Delphi
1
SetLength(field, 0); // не?
Или Вам принципиально удалить и значения, хранящиеся в массиве?
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
25.03.2016, 04:38  [ТС] 3
Или Вам принципиально удалить и значения, хранящиеся в массиве?
Конечно же не принципиально. Просто запускаю приложение и диспетчер задач, после например 10 пере созданий массива приложение начинает больше памяти занимать. как это можно обойти
0
Объявлятель переменных
1220 / 406 / 320
Регистрация: 24.09.2011
Сообщений: 1,274
25.03.2016, 07:38 4
Цитата Сообщение от tmorov Посмотреть сообщение
как это можно обойти
В Вашем случае будет так:
Delphi
1
2
3
4
//Думаю, что на nil можно не проверять
for i := 0 to Length(field)-1 do  //переменная i обязательно знаковая
  SetLength(field[i], 0);
SetLength(field, 0);
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
25.03.2016, 08:57  [ТС] 5
Что то у мну походу руки не от туда растут...
Все равно растет, на 13 пересоздании памяти больше на 8 килобайт начинает занимать, потом на 21-ой +4Кб...
0
251 / 162 / 24
Регистрация: 22.08.2014
Сообщений: 1,598
Записей в блоге: 1
25.03.2016, 11:12 6
К чему все эти мастурбации ?
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
25.03.2016, 11:17  [ТС] 7
Цитата Сообщение от planetoxod
К чему все эти мастурбации ?
интересно почему же она не освобождается
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
25.03.2016, 12:03 8
Delphi
1
2
3
4
SetLength(field, много);
for i := 0 to Length(field) do
   SetLength(field[i], много);
SetLength(field, 0); // память [U]обязана[/U] быть отдана назад в кучу
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
28.03.2016, 05:00  [ТС] 9
Цитата Сообщение от mss
SetLength(field, много);
что означает "много"?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
28.03.2016, 08:09 10
Цитата Сообщение от tmorov Посмотреть сообщение
что означает "много"?
заведомо не ноль
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
28.03.2016, 12:30  [ТС] 11
Всем спасибо за помощь. Нашел я свою ошибку...
Не в массиве дело было, я картинку создавал а память при пересоздании не освобождал
0
28.03.2016, 12:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2016, 12:30
Помогаю со студенческими работами здесь

Очистка памяти массива (С++)
Не получается очистить память массива. По моему коду, по завершении программы выдаётся ошибка...

Очистка памяти от массива
Всем привет! Придумал себе небольшую задачку, чисто в учебных целях. Написал код небольшой. Цель:...

Уничтожение динамического массиа строк
Собсно вот метод: //for(int i=0;i&lt;=n;i++) //delete charr; //delete charr; НО в моей програме...

Освобождение памяти динамического массива
Всем здравствуйте, не могу понять, почему когда освобождаю память динамического массива, значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru