0

2D 配列のアドレスを指していますが、ポインタを逆参照してメモリを解放する方法について混乱しています。(「->」や「*」は使いません。間違っていますか?)

私のコード:

double array[12][12];
//filled with numbers

double *arrayPtr; //pointer

arrayPtr = &array[0][0]; //pointing to address

multiply(arrayPtr, arrayPtr); //this works fine

//Do I need to do anything further to make sure my memory management is correct?  And if so, why?
4

3 に答える 3

4

この場合、答えはノーです。単純に定義arrayした (割り当てなどを使用しなかっmallocた) ため、解放するために何もする必要もありません。ローカル (関数内で定義) の場合、関数を終了すると自動的に解放されます。関数の外側で定義した場合、それはグローバルであるため、プログラムが実行されている間ずっと存在します。いずれにせよ、明示的なメモリ管理を行う必要はありません。

于 2012-05-23T23:09:33.903 に答える
2
double array[12][12];

スタックで宣言arrayしています。ヒープで動的に割り当てられないため、「メモリを解放」しません。

double *arrayPtr; //pointer
arrayPtr = &array[0][0]; //pointing to address

最初の要素を指す場合は、これで十分です。

double* arrayPtr = array;
于 2012-05-23T23:09:48.527 に答える
0

まず、C と C++ にはかなりの違いがあります。

C でメモリ管理を使用するには、malloc/calloc/realloc と free を使用する必要があります。C++ では、new と delete を使用します。

あなたのコードで。

double array[12][12];

これは、スタックにメモリを割り当てることを意味します。したがって、メモリはこのプログラムセクションのスコープに割り当てられ、この変数のスコープが終了すると緑色になります。

無料で使用する場合は、必要になります

 double **array;
 array = (double **) malloc(sizeof(double*));
 *array = (double*) malloc (24 * sizeof(double));

free (*array);
free (array);
于 2012-05-23T23:29:40.827 に答える