2017-07-05 11 views
-2

今日はしばらくプログラミングしていますが、私はこの非常に簡単なことを考えることができないので、休憩が必要だと思います。助けが大いに評価されるでしょう。Cのメンバ配列のメモリ

私はクラス(実際にはForm1)を持ち、メンバ配列int[,]fを持っています。 今私はそれのためのメモリを管理していないし、(おそらく私はする必要がありますか?)。 は、代わりに別の方法では、私が言うの関数を呼び出す:

myFunction(f,.....); 

あなたが見ることができるように、この関数は

void myFunction(int[,] f, ...some other arguments) 
{//.... 
    f= new int[NX,NY]; 
//.... 
} 

のようなものです、私は、関数内でF配列にメモリを分けます。

今私の質問は...私はmyFunctionを離れるときにこのメモリがガベージコレクションされるのでしょうか?

+1

'C++ 'とは何が関係していますか? – iehrlich

答えて

0

まず、あなたはいくつかの非常に重要なことを理解する必要があります。

ガベージコレクションがランダムに発生します。あなたがf作っている第二に

、それらを参照するいかなる変数がGC第三

の対象となりません持って

オブジェクトのみ、

f= new int[NX,NY]; 

は何かを参照してください。 else。元のfは、依然としてForm1.fによって参照されています。しかし、このnew int[NX, NY]オブジェクトは作成され、メソッドのローカルfによってのみ参照されます。

メソッドが返された後、新しいfを参照する必要はありません(他の場所に割り当てていない限り)ので、新しいfはGCに適格になります。 「ガベージコレクション」ではなく、「GCに適格」と言いました。

しかし、Form1は元のfへの参照を保持しているため、元のfはフォームの前にGCの対象になりません(別のものに設定しない限り)。

+0

したがって、関数内のfとそれが管理するメモリはForm1.fを参照していませんか?彼らはコピーしていますか? (私はポインタが渡されるという点でそれらを考えました) – KansaiRobot

+1

はい、 'f = new ...'を実行するまでは、最初はポインタを渡しています。この時点で、メソッドの 'f'は何かを参照していますが、' Form1.f'の値は変更されません。 @KansaiRobot – Sweeper

関連する問題