好奇心のためだけに:このコードが例外をスローするのではなくAVを与えるのはなぜですか?パラメータ化されていないTFormatSettingsがStrToDate()でAVをスローする必要がありますか?
procedure TForm1.Button1Click(Sender: TObject);
var fs: TFormatSettings;
begin
strtodate('2011-01-01', fs);
end;
好奇心のためだけに:このコードが例外をスローするのではなくAVを与えるのはなぜですか?パラメータ化されていないTFormatSettingsがStrToDate()でAVをスローする必要がありますか?
procedure TForm1.Button1Click(Sender: TObject);
var fs: TFormatSettings;
begin
strtodate('2011-01-01', fs);
end;
fs
が初期化されていないため、コードに例外が発生します。
uses SysUtis, Windows;
procedure TForm1.Button1Click(Sender: TObject);
var fs: TFormatSettings;
begin
GetLocaleFormatSettings(GetSystemDefaultLCID, fs); // what is your short-date format?
strtodate('2011-01-01', fs);
end;
今はかなりダムになっていますが、そのレコードタイプがアクセス違反につながるとは考えていません – JustMe
ローカル変数はまったく初期化されていません。それらにはランダムなデータが含まれており、無効なデータを使用するとAVが発生します。 – DiGi
ローカルの 'string'変数は初期化され、Digiと' TFormatSettings'はその型のフィールドを含みます。それらは初期化されます。 Delphi 2005やその他のバージョンでは、 'StrToDate'は' ScanState'を呼び出す 'TryStrToDate'を呼び出し、' ScanDate'は '1'がその文字列の有効なインデックスであるかどうかチェックせずに' FormatSettings.ShortDateFormat [1] 'を読み込みます。レンジ・チェックを有効にしてRTLをコンパイルした場合、エラーは異なって見えます。 –
アクセス違反*は例外です。 –