Вопрос собственно в заголовке темы но поясню...
Может ли не обнуление переменных типа UTF8String, являющихся полями типа данных производного от record, который в свою очередь является типом данных динамических массивов, (которых в свою очередь в программе туевая хуча)... дак вот, может ли не обнуление этих переменных типа UTF8String являться причиной утечки памяти.
В данный момент я просто обнуляю массив: SetLength(0,Massiv);.
Нужно ли обнулять переменные типа UTF8String?
Модератор: Модераторы
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Не должно, по крайней мере в теории.
Утечки не будет, но значение UTF8String все равно занимает память, поэтому желательно обнулять
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
При обнулении массива элементов управляемых типов все его элементы также обнулятся.
>>Утечки не будет, но значение UTF8String все равно занимает память, поэтому желательно обнулять
если стринговая переменная отжила свое и по какойто причине не финализирована, то это самая что нинаесть утечка памяти, о чем heaptrc не постесняется сообщить.
>>В данный момент я просто обнуляю массив: SetLength(0,Massiv);
по идее этого достаточно, если в recorde`е нет полей типа указатель на другие record`ы - в этом случае в тех других record`ах нужно стринги обнулить ручками.
но если heaptrc намекает на то что память утекает внутри обнуляемого таким образом массива и других вариантов утечки с первого взгляда нет - я бы попробовал финализировать всё руками для надежности
если стринговая переменная отжила свое и по какойто причине не финализирована, то это самая что нинаесть утечка памяти, о чем heaptrc не постесняется сообщить.
>>В данный момент я просто обнуляю массив: SetLength(0,Massiv);
по идее этого достаточно, если в recorde`е нет полей типа указатель на другие record`ы - в этом случае в тех других record`ах нужно стринги обнулить ручками.
но если heaptrc намекает на то что память утекает внутри обнуляемого таким образом массива и других вариантов утечки с первого взгляда нет - я бы попробовал финализировать всё руками для надежности
http://articles.org.ru/cfaq/index.php?qid=2464
Относится ли это к UTF8String ?
Перед выходом из процедуры компилятор вставляет специальные функции финализации, ответственные за освобождение выделенной динамической памяти.
Относится ли это к UTF8String ?
>>Относится ли это к UTF8String ?
это относится ко всем string`ам, за исклением "коротких" shortstring, но зависит от настройки компилятора (возможно string=shortstring).
это относится ко всем string`ам, за исклением "коротких" shortstring, но зависит от настройки компилятора (возможно string=shortstring).
