由於某種原因,如果變量是在'Private'(他們需要限制本單元內的訪問)下定義的,我正在整理一些我已經給出的代碼。寫入時遇到EAccessViolation錯誤。如果我在實現前在Var下輕鬆定義它們,則可以正確訪問它們。我將我的結構與其他類似單位進行比較,其中私人單位工作正常&無法找到任何重大差異。有什麼建議嗎?EAccessviolation AV Error使用Private中的變量
錯誤MSG:項目---引發異常類EAccessViolation消息在模塊----中存在消息「訪問虛擬化錯誤」。讀地址0000050F
interface
uses
dialogs, math, dateutils, SysUtils, classes;
type
//double = extended;
TDoubleDoubleArray = array of array of double;
TSunPositionAlgorithm = class (TObject)
private
FLocationChanged: boolean;
public
Constructor Create;
Destructor Destroy;
procedure SetDefaults;
end;
Var
SunPositionAlgorithm : TSunPositionAlgorithm;
F_L0: Double;
F_L1: TDoubleDoubleArray;
implementation
{TSunPositionAlgorithm }
constructor TSunPositionAlgorithm.Create;
begin
SetDefaults;
end;
procedure TSunPositionAlgorithm.SetDefaults;
Begin
F_L0:= 1; // works ok
FLocationChanged:=true; // throws eaccess violation error
End;
調用函數(添加到郵政大衛H公司的第一個問題之後):
procedure TSun.NRELPositionOfSun(const DateTime: TDateTime; var Azimuth, Elevation, Declination: double);
Var
LSunPositionAlgorithm : TSunPositionAlgorithm;
Begin
LSunPositionAlgorithm := TSunPositionAlgorithm.Create;
Try
LSunPositionAlgorithm.SetDefaults;
blah..
Finally
LSunPositionAlgorithm.Destroy;
End;
End;
嗨大衛,感謝您的快速響應,關於檢查調用代碼的好點,儘管我的結構與您的測試fn非常相似,(我已將調用函數添加到原始問題中)。關於創建/刪除語法的好點,我會整理起來,看看它是否運行 – SolarBrian
hmm,還沒有雪茄,問題發生與&fulldrug模式和mem漏洞報告fastmm4 – SolarBrian
問題中的代碼是不是真正的碼。該代碼不會產生訪問衝突。請發佈展示您描述的行爲的真實代碼。 –