2017-03-27 8 views

答えて

5

あなたは間違ったコードを使用しています。それが作成されるまでは

procedure TForm1.Button1Click(Sender: TObject); 
     var 
     ts: TStream; 
     begin 
     ts := TStream.Create; // If Lazarus supports creation of Stream instances. 
     ts.Free; 
     end; 

する必要があり、あなたの変数tsは単にスタックの以前の使用からジャンクが含まれています。ヒープ上の実際のオブジェクトを割り当てるためにクラスのコンストラクタを呼び出さなければならず、tsの変数を指している必要があります。

ラザロが、それは、(それは抽象クラスとして扱うことと、私がチェックするには、このマシン上でラザロを持っていない)TStreamにのインスタンスを作成する代わりに、このような何かを試すことができないと文句を言いた場合:

var 
    ts: TMemoryStream; 
    begin 
    ts := TMemoryStream.Create; 
    ts.Free; 
    end; 

TMemoryStreamではなく、他の具体的なTStream-descendantクラスを使用できます。

memStream.Create; 

しかし、それは次のようになります:

+0

これはそうではない倍以上の重複数百のですか? –

+1

@DavidHeffernan:問題は、質問者が何を尋ねるかを知っていれば、最初に問題がないので質問する必要がないということです。私の驚きではなく、ますます間違いなくGoogleは、ヒットの最初のページで「delphi create access violation」というグーグルを返すことはありません。最近では、最初の2〜3日で正しい答えが見つかるようです。 – MartynA

+0

あなたのGoogleが何をしているのかはっきりしていませんが、ここでそれらの検索用語が私の提案した二重引用符を最初のヒットとして返します。 –

0

はもともと、このコードをしようとしていた

memStream := TMemoryStream.Create; 

何とか...

関連する問題