Накидал пример в котором есть структура(простейшая), массив из этих структур, ну и запись/чтение массива структур в/из файл(а).
В процедуре чтения все идет на ура, проверяю в отладчике, все делается как надо. Как только строка переходит на "end" этой процедуры, выскакивает "Invalid pointer operation".
Кому лень качать, вот часть листинга:
type
TXSession = record
name : string;
name2 : string;
end;
XRecordArray = array of TXSession;
......
class procedure TXSessionClass.ReadTXSessions(var AXArray: XRecordArray);
var
FS : TFileStream;
XSession : TXSession;
i, arr_length : integer;
begin
FS := TFileStream.Create( 'Sess_arr.txt', fmOpenRead );
FS.Read(arr_length, SizeOf(integer));
SetLength(AXArray, 0);
for I := 0 to arr_length-1 do
begin
FS.Read(XSession, SizeOf(TXSession));
SetLength(AXArray, Length(AXArray) + 1);
AXArray[Length(AXArray)-1] := XSession;
//AXArray := AXArray + [XSession];
end;
FS.Free;
FS := nil;
end; //<-- Тут вываливается IPO
Вопрос
xenon54
Всем привет!
Вопрос вроде бы легкий, но ....
Накидал пример в котором есть структура(простейшая), массив из этих структур, ну и запись/чтение массива структур в/из файл(а).
В процедуре чтения все идет на ура, проверяю в отладчике, все делается как надо. Как только строка переходит на "end" этой процедуры, выскакивает "Invalid pointer operation".
Кому лень качать, вот часть листинга:
type TXSession = record name : string; name2 : string; end; XRecordArray = array of TXSession; ...... class procedure TXSessionClass.ReadTXSessions(var AXArray: XRecordArray); var FS : TFileStream; XSession : TXSession; i, arr_length : integer; begin FS := TFileStream.Create( 'Sess_arr.txt', fmOpenRead ); FS.Read(arr_length, SizeOf(integer)); SetLength(AXArray, 0); for I := 0 to arr_length-1 do begin FS.Read(XSession, SizeOf(TXSession)); SetLength(AXArray, Length(AXArray) + 1); AXArray[Length(AXArray)-1] := XSession; //AXArray := AXArray + [XSession]; end; FS.Free; FS := nil; end; //<-- Тут вываливается IPOtest.zip
1 ответ на этот вопрос
Рекомендуемые сообщения