Delphi XEプログラムで非常に断続的なメモリ破損を検索する際に、クラス内のいくつかのフィールドを初期化するクラスコンストラクタが見つかりました。次にが継承されます。初期化は、コンストラクターが最初に書かれた後、誤って間違った場所に追加された後に追加されたものだと思います。私は今、継承されたものを最初に呼び出すように修正しました。このクラスのメソッドでは、メモリ破損の例外がほとんど常に発生します。継承を間違って呼び出すと、どのような被害がありますか?
質問:この間違いが断続的なメモリ破損を引き起こした可能性はありますか?コードをトレースすると、そうは思われませんが、私はこの修正が断続的な問題を解決するものであることを本当に望みます。それが問題を解決した後しばらくは起こらないということは、それがなくなったことを証明するものではありません。
いくつかのコード:あなたは(それがターボPascalや「古い」オブジェクト・モデルで働いていませんが、それはデルファイ「新しい」オブジェクトに許可され、継承されたコンストラクタを呼び出す前に、オブジェクトのフィールドを初期化することができますDelphiでは
Tmyclass = class
ctype : integer;
ts : tstringlist;
th : thandle;
public
Constructor Create;
Destructor Destroy; override;
...
end;
Constructor Tmyclass.Create;
begin
ctype := 3;
doinit;
inherited;
end;
私たちにいくつかのコードを見せてください。あらゆる種類のものが間違っているかもしれないし、そうでないかもしれない。 –