![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Siton |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 17.7.2006 Репутация: нет Всего: нет |
Программа работает в круглосуточном режиме.
Возникает утечка памяти при работе с компонентом TStrings при добавлении объекта к строке. Где то я вычитал что делфи сам не очищет объекты добавленные таким способом. При вызове метода TStrings.Clear - память не очищается, я проверял с помощью memproof и DMM. При добавлении кода
возникает ошибка обращения к памяти. Помогите мне пожалуйста. Код программы чужой. Может быть нужно сделать переменную slPr - глобальной. Привожу пример кода:
|
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Интересно как же вам удалось создать экземпляр класса TStrings, учитывая что он абстрактный. Если утечка и возникает, то только по вине наследника, TStrings, который не правельно работает с памятю. Сам же TStrings c ней непосредственно не работает. Ищите главного виновника, - кто скрывается под личиной TStrings - кто у нас сегодня самое слабое звено -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Siton |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 17.7.2006 Репутация: нет Всего: нет |
Переменная slPr берется из другой процедуры где имеет тип TStringList
Вот код :
|
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Да но ведь StringList не содержит объектов, только строки, поэтому и пытается обратится к несуществующему объекту Добавлено @ 17:48 Ух ты я и не знал, что туда можно еще и объекты пихать, такое ощущение, что они не присваивались. Добавлено @ 17:52 Я проверил
Все работает нормально! просто один из объектов не существует уже. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| Wing |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 19.3.2006 Репутация: нет Всего: нет |
Попробуй все таки переименовать все TString на TStringList.
Сделай проверку
Посмотри как работает FreeAndNil:
Возможно нужно также поступить в твоем случае. |
||||
|
|||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Solve code for lines 14..17 of 2nd code in post #1
Добавлено @ 19:54 Опа, уже повтор. Лапы не шибко быстро сгинаются. --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Никогда в коде программы не используйте TStrings, это абстрактный класс, нужно использовать TStringList! |
|||
|
||||
| Siton |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 17.7.2006 Репутация: нет Всего: нет |
Проверка (Assigned(slPr.Objects[i])) не помогает, все равно ошибка обращения. При использовании FreeAndNil компилятор пишет Constant object cannot be passed as var parameter. В чем ошибка.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
А если так
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Siton |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 17.7.2006 Репутация: нет Всего: нет |
Ошибка обращения (AV) на строке o := slPr.Objects[i];
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Siton, У вас проблемы не с освобождением, а с самим объектом - где-то раньше.
Я проверял почти весь код который приводился (из того что компилировался) работает. Вероятно имеюстся проблемы с объектами - напимер если использовались потоки, или в результате ошибки портится содержимое объекта. Похоже, что при вызове деструктора объекта возникает ошибка. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
Согласен с
Akella, используй строку описания функции
Если ошибок в другом месте нет , значит код запустится сразу -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Mechanic |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Создавать такой экземпляр не надо, но вот как тип параметра - почему же не использовать? Мало-ли что понанаследуется, а строки есть строки.
Вот здесь идет адресная арифметика, а результат идет в объектный указатель. Может быть тут и пишется неверный указатель? --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
||||||
|
|||||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
Mechanic, из исходников
куда объект в последней функции записыватся будет????? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Siton |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 17.7.2006 Репутация: нет Всего: нет |
Переменная slPr обявляется не глобально. Может быть ее обявить как глобальную?
И еще, можноли передать в функцию не переменную а указатель? |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |