powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Утечка памяти EurekaLog, Dictionary
11 сообщений из 11, страница 1 из 1
Утечка памяти EurekaLog, Dictionary
    #40115757
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простенький пример с сайта 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
Утечка памяти EurekaLog, Dictionary
    #40115766
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо очищай все элемнты в словаре вручную перед его очисткой, либо замени TDictionary на TObjectDictionary и в конструкторе укажи свойство Ownerships: TDictionaryOwnerships в нужное значние.
...
Рейтинг: 0 / 0
Утечка памяти EurekaLog, Dictionary
    #40115770
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bzums

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

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

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

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

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

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

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

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

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

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


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