私は以下のアドレスに、Delphi の大きなバグについての文章を書きました。わざわざ読む必要はありません。ここで繰り返します。
しかし、以下のコメントを見てもらえると思います。
http://www.csdn.net/Develop/read_article.asp?id=12525
元のコードはこんな感じですが、
手順 TForm1.Button1Click(送信者: TObject);
変数
文字列:TStringList;
始める
Assigned(strings) でない場合は、
始める
文字列 :=TStringList.Create;
// ShowMessage('sfdasfd'); あれやこれやの文を追加すれば問題ありませんが、そうでなければ(笑)。
終わり;
文字列.無料;
文字列 := nil;
終わり;
実際、注目したい行は 1 つだけあり、それは strings.Free 行です。
しかし、多くの不必要なトラブルを引き起こすコードが他にも存在することは何度も強調しましたが、コアのコードは依然として他の花輪によって覆われています。そしてそれはいつも誤解を生むので、
コードを次のように書き換えます。
プロシージャ TForm1.Button1Click(送信者: TObject);
変数
文字列:TStringList;
始める
文字列.無料;
終わり;
実際、このコードの TStringList クラスは、試したい任意のクラスに置き換えることができます。
このように、CPU ウォッチ ウィンドウを使用すると何かを見つけることができますが、使用しない場合は Ctrl+F2 を押すだけです。
プログラムを終了します。
このタイトルもバカバカしい意味なのか分かりませんが、とにかく中国語です。あなたも私も理解しています。
実際、このコードの目的は、オブジェクトの正しい使用に注意を払うことを思い出させることです。このコードのエラーの理由については、次のとおりです。
これは確かにコンパイラの省略だと思いますが、クラスとオブジェクトのメモリ構造について研究したことがない場合は、まずそれを放置し、次に研究することをお勧めします。