Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Как правильно удалить запись содержащюю дин. массивы   Найти похожие ветки 

 
Kolan ©   (2005-10-01 12:31) [0]

Здравствуйте,
 ПРи завершении программы я удаляю массив состояший из записей:
 FMeasurments: array of PMeasurmentData;

Запись выглядит так:
 
 PMeasurmentData = ^TMeasurmentData;
 TMeasurmentData = record
   {OutPut}
   OutPutGraff: TArrayOfTPair;
   OutPutMeasurments: TArrayOfMeasurmentGrid;
   OutPutResAntiRes: TArrayOfTPair;
   OutPutName: string;
   OutPutCapacity: Double;

   {Future compatibility.}
   OutPutActiveGarff: TArrayOfTPair;

   {InPut}
   InPutRange: TArrayOfLongint;
   InPutFindResonanceRange: TArrayOfLongint;
   InPutStep: Single;
   InPutOperator: string;
   InPutDevice: string;
   InPutDateTime: TDateTime;
   InPutNumber: Integer;

   {}
   IsThisRecordFilled: Boolean;
   MeasurmentState: TMeasurmentStates;
   { 0 - MeasurmentNull;
     1 - Measurment in prosess, but data not ready.
     2 - Measurment in prosess, data is ready.
     3 - Measurment finished.
   }
   CurrentPosition: Longint;
   LastCalledPosition: Longint;
 end;


А удаляю так:

destructor TMeasurmentManager.Destroy;
var
 I: Integer;
begin
 for I := Low(FMeasurments) to High(FMeasurments) do
   Dispose(FMeasurments[I]);
 SetLength(FMeasurments, 0);
 inherited Destroy;
end;


Вопрос правильно ли я удаляю? Или надо делать всем дин массивам SetLength(M, 0)?


 
TUser ©   (2005-10-01 12:46) [1]

Надо.

Собственно говоря, при завершении работы программы память и так высвободится - это задача системы. Но лучше все-таки правильно написать освобождение памяти в деструкторе, т.к. при последующем использовании написанного однажды класса его освобождение может потребоваться до окончания работы программы.


 
Kolan ©   (2005-10-01 12:52) [2]

Дело в том что, если я загружаю запись из файла то всё нормально, а если заполняю с прибора, то в выделленной строке получаю Invalide Pointer Operation.

Это очень странно, тк в файл запись сохраняются измерения прибора. И вроде разницы нет никакой...

destructor TMeasurmentManager.Destroy;
var
I: Integer;
begin
for I := Low(FMeasurments) to High(FMeasurments) do
  Dispose(FMeasurments[I]);
SetLength(FMeasurments, 0);
inherited Destroy;
end;


Собственно говоря, при завершении работы программы память
Да если закоментить то проблем нет. Но я тут с MemProof разобрался а он мне сказал что так делать низя :)


 
TUser ©   (2005-10-01 13:01) [3]

А FMeasurments - это массив указателей? Значит ты ему длину сделал, а память выделил не под все записи.

> И вроде разницы нет никакой

Значит есть.


 
begin...end ©   (2005-10-01 13:14) [4]

> Kolan ©   (01.10.05 12:31)

> Или надо делать всем дин массивам SetLength(M, 0)?

Не надо.


 
GuAV ©   (2005-10-01 14:15) [5]


> Как правильно удалить запись содержащюю дин. массивы

если запись отдельно создаётся динамически (через указатель), то
Dispose

или (не рекмендуется, н всё же)
Finalize + не-Dispose удаление (FreeMem например).

Запись выделенная как элемент динамического массива, поле класса, глобальная или локальная  переменная (не через указатель) удаляется автоматически.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
3-1126758023
Barmaglot
2005-09-15 08:20
2005.10.23
Склейка полей и отображение их в combobox


1-1128237120
тт
2005-10-02 11:12
2005.10.23
Как програмно создать Word-документ и вставить рисунок по центру?


4-1124295704
TG
2005-08-17 20:21
2005.10.23
Хочу написать звонилку


8-1117163884
race1
2005-05-27 07:18
2005.10.23
векторные либы


14-1127820439
VictorT
2005-09-27 15:27
2005.10.23
Подкиньте плиз ссылок на описание Pagemaker tagged text





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский