type
TSomeRecord = Record
field1: integer;
field2: string;
field3: boolean;
End;
var
SomeRecord: TSomeRecord;
SomeRecAr: array of TSomeRecord;
Это самый простой пример того, что у меня есть, и поскольку я хочу повторно использовать SomeRecord
(при этом некоторые поля остаются пустыми, не освобождая все поля, которые будут переноситься при повторном использовании SomeRecord
, что очевидно нежелательный) Я ищу способ бесплатно освободить все поля сразу. Я начал с string[255]
и использовал ZeroMemory()
, что было хорошо, пока не началось утечка памяти, потому что я переключился на string
. Мне все еще не хватает знаний, чтобы понять, почему, но, похоже, это связано с динамикой. Я также использую динамические массивы, поэтому я предполагаю, что попытка ZeroMemory()
на любом динамическом результате приведет к утечкам. Один день потерял это. Думаю, я решил это, используя Finalize()
на SomeRecord
или SomeRecAr
до ZeroMemory()
, но я не уверен, что это правильный подход или просто я глуп.
Итак, вопрос: как освободить все сразу? существует ли какая-то одна процедура для этого, о которой я не знаю?
В другой заметке, в качестве альтернативы, я был бы открыт для предложений о том, как реализовать эти записи по-разному для начала, поэтому мне не нужно делать сложные попытки освободить материал. Я изучил создание записей с помощью New()
, а затем избавился от него Dispose()
, но я понятия не имею, что это означает, когда переменная после вызова Dispose()
равна undefined, а не nil. Кроме того, я не знаю, какая разница между переменной определенного типа (SomeRecord: TSomeRecord
) и переменной, указывающей на тип (SomeRecord: ^TSomeRecord
). В настоящий момент я изучаю вышеупомянутые проблемы, если кто-то не может объяснить это быстро, это может занять некоторое время.