这段程序报错,谁能帮我看下,谢谢
function XinKaiPuDll_GetPIDInfo(A_pInfo: PXinKaiPuDllPIDInfoArr;
var A_sRstMsg: String): Boolean;
var
iRst1,i,iCount: Integer;
pInfo: PXinKaiPuDllPIDInfo;
begin
Result := False;
iRst1 := -1;
New(pInfo);
FillChar(pInfo^,SizeOf(pInfo^),#0);
iRst1 := XinKaiPuDll_CapGetAllSFdetail(pInfo);
if iRst1 > 0 then
begin
iCount := iRst1;
SetLength(A_pInfo^,iCount);
for i := 0 to iRst1 - 1 do
begin
A_pInfo^[i].PID := pInfo^.PID;
StrCopy(A_pInfo^[i].PName,PChar(Trim(pInfo^.PName)));
Inc(pInfo);
end;
Result := True;
end
else
begin
A_sRstMsg := XinKaiPuDll_ErrorMsg(iRst1);
end;
Dispose(pInfo); //执行到这里,释放指针时报‘invalid pointer operation’end;
[解决办法]
....
iRst1 := XinKaiPuDll_CapGetAllSFdetail(pInfo);
....
检查iRst1的值,若<1 ,到函数XinKaiPuDll_CapGetAllSFdetail中去跟。
[解决办法]
由于你inc(pinfo);导致pinfo移位,所以报错
[解决办法]
指针的值都变了,你还dispose啊。。
[解决办法]
将pinfo赋值给另一个指针,然后用那个指针操作。永远记住:new()的指针不能直接操作!