在下面的方法中,FreeMem()會拋出一個EAccessViolation。可能的原因是什麼?FreeMem顯然正在拋出EAccessViolation
procedure TCustomDataset.FreeRecordBuffer(var Buffer: PChar);
begin
FreeMem(Buffer);
end;
編輯: 據我瞭解TDataSet的緩衝區只在分配:
function TCustomDataset.AllocRecordBuffer: PChar;
begin
Result := AllocMem(GetBufferSize);
end;
,只有在FreeRecordBuffer()
現在我已經檢查,並在我的情況2釋放緩衝區被分配,第一個被釋放而沒有困難,但第二個導致FreeMem()拋出一個EAccessViolation。我還檢查了(通過寫下指針地址),這兩個地址都是由AllocRecordBuffer()給出的,並傳遞給FreeRecordBuffer(),而不是其他的。
根據Delphi Basics FreeMem()應該只在指針無效時拋出一個EInvalidPointer。
編輯:發現問題,我覆蓋了內存。
你有沒有看過FreeMem'ing第一個之前和之後的兩個緩衝區的內容?他們看起來腐敗嗎? –
我會檢查,我已經改變了MemoryManager,它看起來像創建後,它只被刪除一次,所以如朋友建議我會嘗試尋找覆蓋。 – JPvdMerwe