Tôi nhận được vi phạm truy cập từ thiết bị DBXCommon.pas
(trong Delphi XE). Khi tôi nhìn vào đoạn code tôi nhìn thấy những thứ như sau (tại dấu chấm than):Không nên gọi miễn phí trên một tham chiếu đối tượng được đặt thành nil để ném Vi phạm Truy cập mỗi khi được gọi?
function TDBXConnectionFactory.GetConnection(const DBXContext: TDBXContext;
const ConnectionProperties: TDBXProperties): TDBXConnection;
var
ConnectionBuilder: TDBXConnectionBuilder;
DelegatePath: TDBXDelegateItem;
Connection: TDBXConnection;
CombinedProperties: TDBXProperties;
begin
//...
ConnectionBuilder := TDBXConnectionBuilder.Create;
Connection := nil;
try
//..lots of setting ConnectionBuilder properties
ConnectionBuilder.FInputPassword := CombinedProperties[TDBXPropertyNames.Password];
Connection := ConnectionBuilder.CreateConnection;
Connection.Open;
Result := Connection;
!! Connection := nil;
finally
!! Connection.Free;
ConnectionBuilder.Free;
end;
end;
Nhưng tôi thấy cấu trúc như thế này (lần đầu tiên gán Nil, sau đó một miễn phí) nhiều hơn nữa trong DBXCommon.pas
. Đây có phải là một số cấu trúc tôi không biết, hoặc là điều này thực sự gây ra vi phạm truy cập mỗi lần đoạn mã này được gọi là?
Dupe - http://stackoverflow.com/questions/8548843/why-should-i-not-use-if-assigned-before-using-or-freeing-things – OnTheFly
@user điều này dường như không phải là dupe. –