我有一些指向一些复杂记录的指针.有时当我尝试处理它们时,我得到无效的指针操作错误.我不确定我是否正确地创建和处理它们.记录看起来像这样:
type
PFILEDATA = ^TFILEDATA;
TFILEDATA = record
Description80: TFileType80; // that's array[0..80] of WideChar
pFullPath: PVeryLongPath; // this is pointer to array of WideChar
pNext: PFILEDATA; // this is pointer to the next TFILEDATA record
end;
Run Code Online (Sandbox Code Playgroud)
据我所知,当我想要一个指向这样的记录的指针时,我需要初始化指针和动态数组,如下所示:
function GimmeNewData(): PFILEDATA;
begin
New(Result);
New(Result^.pFullPath);
end;
Run Code Online (Sandbox Code Playgroud)
现在处理这些记录的系列我写道:
procedure DisposeData(var pData: PFILEDATA);
var pNextData: PFILEDATA;
begin
while pData^.pNext <> nil do begin
pNextData := pData^.pNext; // Save pointer to the next record
Finalize(pData^.pFullPath); // Free dynamic array
Dispose(pData); // Free the record …Run Code Online (Sandbox Code Playgroud)