![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
buff не глобальная переменная. Но для записи в неё, я передаю указатель.
Обновил прошлое сообщение. Может быть проблема в том что я так записываю в функции: string(result^):=string(result^)+code; Это сообщение отредактировал(а) lollollollol - 3.4.2013, 17:03 |
|||
|
||||
| Чучмек |
|
||||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Что за кака?
Это сообщение отредактировал(а) Чучмек - 3.4.2013, 17:13 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Извиняюсь, думал что нельзя так указатели использовать.
А пример подобного кода(как у меня) я вычитал на каком-то форуме. Это сообщение отредактировал(а) lollollollol - 3.4.2013, 17:10 |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Не правильно передаешь строки. Строка имеет внутренний счетчик ссылок. Менеджер памяти освобождает выделенную под строку память, когда счетчик ссылок равен нулю.
Добавлено @ 17:14 Моя невнимательность. var S:string; Это сообщение отредактировал(а) Чучмек - 3.4.2013, 17:15 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Исправил, всё по прежнему
|
|||
|
||||
| Beltar |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
Никаких пойнтеров к стрингам, если ТОЧНО не знаешь, что делаешь. Вообще срочно читать учебник для начинающих. Что мешает по-русски написать?
А лучше
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||||
|
|||||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
А чем лучше? Добавлено через 7 минут и 20 секунд А еще подобные конструкции есть. lollollollol, Поставь перед end;
Должно выводить единицу. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| lollollollol |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
От подобных уонструкций избавился, сделал как ты показал. результат
-2054110216 Забыл добавить, код выполняется в потоке, то есть я на каждый запрос браузера выделаю поток.
И уже в потоке работаю с перменной buff:string; Делал так:
Это сообщение отредактировал(а) lollollollol - 3.4.2013, 18:07 |
||||
|
|||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
Тем, что если один возвращаемый параметр, то через функцию банально лучше воспринимается, хотя процедурка тут побыстрее должна быть.
А поток по завершении совершит самоубийство? Если нет, то все, утечка раз дескриптор потерян. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Beltar, даже если так не делать, ничего не меняет, проверил. и утечка таже, и -2054110216
|
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 3 Всего: 7 |
Ты вызываешь ф-ию WinAPI, ее утечки дельфовым менеджером памяти не отловить. Можно MemProof по пробовать.
По алгоритму отладчик в помощь, но сначала переписать все без указателей. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Это нормально. Это из за Здесь не должно быть больше 1. Твоя проблема в потоках. ExitThread не возвращает управление. Соответственно не выполняется код, который добавляет делфа для освобождения строк, по завершении функции. Добавлено @ 18:38 Закоментируй строку , и проверь Добавлено @ 18:44 Сделай так:
Это сообщение отредактировал(а) Чучмек - 3.4.2013, 18:45 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Чучмек, спасибо!!!
Закоментировал строку
и утечка пропала. память возвращает в норму, прям до байтика! Вот уж не думал что проблема в этом... Огромное спасибо! Добавлено через 9 минут и 58 секунд Интересует вопрос. Всё ли корректно с потоком, если не вызывать ExitThread(0);, и не повредит ли закрытие хендла сразу после создания потока? Не смог найти статью, но читал что такое действие спасает от утечки при завершении потока. Это сообщение отредактировал(а) lollollollol - 3.4.2013, 18:57 |
|||
|
||||
| Чучмек |
|
||||||||||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Во первых решается. Во вторых - корректно.
Функция ThreadProc
Не повредит.
Функция CreateThread -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||||||||
|
|||||||||||
| lollollollol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Я сразу так сделал, как увидел Ваше сообщение. Но остался вопрос, получается если сделать так как вы показали, и сразу закрыть хендл, как это сделано у меня, то можно не бепокоиться о том, что объект потока может быть не закрыт? Я знаю что в системе есть ограничение на потоки для одного процесса. И если буду висеть примерно 2000 объектов потоков, то новые потоки созданы не будут. P.S. Думаю тему будет разумно переименовать в Утечка памяти, String, Потоки или что нибудь подобное, чтобы люди могли найти решение Это сообщение отредактировал(а) lollollollol - 3.4.2013, 20:53 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |