Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка памяти EurekaLog, Dictionary / 11 сообщений из 11, страница 1 из 1
28.11.2021, 23:32
    #40115757
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
Простенький пример с сайта Embarcadero
Код: html
1.
https://docwiki.embarcadero.com/CodeExamples/Sydney/en/Generics_Collections_TDictionary_(Delphi)


Но EurekaLog ругается на утечки памяти.
Вопрос больше теоретический:
Если есть несколько обеьктов одного класса, то как их правильно освободить?
В данном случае 2 раза City := TCity.Create а освободается только один раз.

Знаю, что модно загнать в StringList.Add('', Object) или ObjectDictiaonary....
Или как вариант - запись.
А есть какие-то более очевидные варианты?

Типа City[1], city[2]....

спасибо!

Код: pascal
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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
type
  TCity = class
    Country: String;
    Latitude: Double;
    Longitude: Double;
  end;

var
  Form20: TForm20;

implementation

{$R *.dfm}

procedure TForm20.Button1Click(Sender: TObject);
var
  Dictionary: TDictionary<String, TCity>;
  City, Value: TCity;
  Key: String;
  i: integer;
begin
  { Create the dictionary. }
  Dictionary := TDictionary<String, TCity>.Create;

  City := TCity.Create;
  City.Country := 'United Kingdom';
  City.Latitude := 51.5;
  City.Longitude := -0.17;
  Dictionary.Add('London', City);

  City := TCity.Create;
  City.Country := 'Argentina';
  { Notice the wrong coordinates }
  City.Latitude := 0;
  City.Longitude := 0;
  Dictionary.Add('Buenos Aires', City);

  { Clear all entries in the dictionary. }
  Dictionary.Clear;

  { Free the memory allocated for the dictionary. }
  Dictionary.Free;
  City.Free;
end;

end.
...
Рейтинг: 0 / 0
29.11.2021, 01:11
    #40115766
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
Либо очищай все элемнты в словаре вручную перед его очисткой, либо замени TDictionary на TObjectDictionary и в конструкторе укажи свойство Ownerships: TDictionaryOwnerships в нужное значние.
...
Рейтинг: 0 / 0
29.11.2021, 02:45
    #40115770
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
bzums

Вопрос больше теоретический:
Если есть несколько обеьктов одного класса, то как их правильно освободить?
В данном случае 2 раза City := TCity.Create а освободается только один раз.

И ответ тоже теоретический. Ссылка на объект не есть сам объект!
...
Рейтинг: 0 / 0
29.11.2021, 09:21
    #40115790
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
Буду благодарен, если укажете ресурс, где про это написано подробнее. Спасибо.

ПС. Полагал, что все примеры по ссылке выше можно использовать как есть. То есть они написаны как положено....
northener
bzums

Вопрос больше теоретический:
Если есть несколько обеьктов одного класса, то как их правильно освободить?
В данном случае 2 раза City := TCity.Create а освободается только один раз.

И ответ тоже теоретический. Ссылка на объект не есть сам объект!
...
Рейтинг: 0 / 0
29.11.2021, 09:52
    #40115798
istrebitel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
...
Рейтинг: 0 / 0
29.11.2021, 11:09
    #40115815
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
...
Рейтинг: 0 / 0
29.11.2021, 13:35
    #40115863
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
Чтобы сделать чай сладким, не обязательно использовать Синтаксический Сахар.
...
Рейтинг: 0 / 0
29.11.2021, 13:54
    #40115874
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
bzums
Код: html
1.
https://docwiki.embarcadero.com/CodeExamples/Sydney/en/Generics_Collections_TDictionary_(Delphi)

Капец! Какой индус это писал?
...
Рейтинг: 0 / 0
29.11.2021, 13:55
    #40115875
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
Может нужно добавить ссылку на документацию?

И вот это Or you need to replace dictionary with TObjectDictionary with ownership.не поможет. Они в конце делают City.Free
...
Рейтинг: 0 / 0
29.11.2021, 13:59
    #40115877
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
bzums
В данном случае 2 раза City := TCity.Create а освободается только один раз.
На каждый TMyObject.Create должен где-то вызываться Free. Причем ровно один раз. Кроме случаев, когда мы работаем с интерфейсами
...
Рейтинг: 0 / 0
29.11.2021, 17:50
    #40115948
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Утечка памяти EurekaLog, Dictionary
_Vasilisk_
Может нужно добавить ссылку на документацию?

Хз, это автосоздаваемый тикет по ссылке Help Feedback в каждой статье. Статья указывается в subject.

_Vasilisk_
И вот это не поможет. Они в конце делают City.Free

Не, ну как бы предполагается, что пример адаптируют.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка памяти EurekaLog, Dictionary / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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