Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Утечка памяти про работе со строками, или как "удалить" строку 
:(
    Опции темы
Ibragim
Дата 22.1.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



День добрый.
Есть участок кода, выполняется в цикле, который вызывает утечку памяти:

Код

    try
      SiteContent := ht.Get(Url);
    except
      ht.Free;
      State := 'Error';
      Synchronize(ShowState);
      Continue;
    end;
    ht.Free;
    SiteContent := LowerCase(SiteContent);


Как говорит MemProof, не удаляется объект SiteContent, то есть при следующей итерации цикла место из-под прошлого SiteContent не освобождается, а создается новая область в куче.
Как корректно освободить место из-под SiteContent? Пробую DisposeStr(@SiteContent); но функция, как говорит помощь, корректно работает только со строками, созданными NewStr. Да и опыт показал, что так нестабильно.
Как правильно решается такая задача?
Заранее спасибо.
PM MAIL   Вверх
MetalFan
Дата 22.1.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



все супер. в приведенном куске кода никаких ошибок не наблюдается, с чем автора и поздравляю.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ibragim
Дата 22.1.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



н-да действительно, в "голом" проекте нет утечки...
черт, где же собака порылась...

А можно вот так? 

Код

s := ConLinks(Url, s);


ConLinks - моя функция, s, Url: string;
PM MAIL   Вверх
ShadeSt
Дата 22.1.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 9.8.2005
Где: Россия, г. Ставро поль

Репутация: нет
Всего: 7



Либо так:
Код

  S := ''

либо так
Код

  Finalize(S);


если я правильно понимаю, то утечка может быть в том случае, если ht.Get() выделяется новый участок памяти под строку.
попробуй так:
Код

      SiteContent := '';
      SiteContent := ht.Get(Url);



--------------------
It's nice to be importand, but it's more importand to be nice © Scooter
PM MAIL ICQ Jabber   Вверх
Ibragim
Дата 22.1.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



Код

SiteContent := '';
SiteContent := ht.Get(Url);


Так пробовал, не помогает. Сча попробую Finalize
PM MAIL   Вверх
MetalFan
Дата 22.1.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Ibragim @  22.1.2007,  17:34 Найти цитируемый пост)
А можно вот так? 

что вот так?

абсолютно неинформативные сообщения. такое ощущение, что сам с собой автор разговаривает)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ibragim
Дата 22.1.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 28.9.2004
Где: Киев

Репутация: нет
Всего: нет



гм, сорри smile 

Не вызовет ли утечку памяти, если в работе со строками сделать следующее.
1. Создать функцию, положим 

Код

function ConLinks(Url: string; s: string);
begin
   s := LeftStr(s,20);
   Result := LeftStr(Url,5) + s;
end;


2. И вызывать эту функцию следующим образом

Код

s := 'test2test2test2test2test2test2test2';
Url := 'test1test1test1test1test1test1test1test1';
s := ConLinks(Url, s);

PM MAIL   Вверх
aktuba
Дата 23.1.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Я так понимаю, это код из DLL. Ты случаем не передаешь данные из/в программу?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Stern87
Дата 25.2.2008, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 27.11.2007
Где: Украина

Репутация: нет
Всего: нет



Если я не ошибаюсь, то строки в параметрах надо писать через const.
PM WWW ICQ Skype   Вверх
MetalFan
Дата 25.2.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Stern87 @  25.2.2008,  03:24 Найти цитируемый пост)
Если я не ошибаюсь, то строки в параметрах надо писать через const. 

смотря какая цель преследуется...


Цитата(Ibragim @  22.1.2007,  17:52 Найти цитируемый пост)
Не вызовет ли утечку памяти, если в работе со строками сделать следующее.

не вызовет. частенько так делаю, чтобы не заводить явно локальные переменные.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.