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()
не определен, а не равен нулю. Кроме того, я не знаю, в чем разница между переменной определенного типа (SomeRecord: TSomeRecord
) и переменной, указывающей на тип (SomeRecord: ^TSomeRecord
). В настоящее время я изучаю вышеуказанные проблемы, если кто-то не сможет объяснить это быстро, это может занять некоторое время.