2010-12-13 18 views
2

以下の配列をヘッダファイル内に宣言します。静的配列を指すポインタを解放する

static const float elementsArray[300] = { ... }; 

私がやりたい:

float *elementsPointer = &elementsArray[0]; 

私はそれを行うことができると確信していますが、...私はdeleteelementsPointerを解放する必要がありますか?

他に何かする必要はありますか?

ありがとうございます。

+1

あなたはそれを行うことができますが、それはconstではないのでできません。 constとして宣言されているメモリに書き込み可能なデータへのポインタを割り当てています。 – CashCow

+1

C++では 'malloc'と' free'ではなく 'new []'と 'delete []'を使うべきです。 –

+0

@CashCow:要素を読み込むためにelementsPointerだけ必要です。私は要素がどこになるのか分からないので、これをやっています。このコードはswitch文の中にあり、要素にアクセスするための既知のvar(elementsPointer)が必要です。場合によっては、elementsPointerは静的配列または他の配列を指します。 – VansFannel

答えて

5

いいえ.Pointerが指すメモリは静的に割り当てられており、空き領域を呼び出す必要はありません。

+0

私はmallocを行う必要はないと思いますか? – VansFannel

+1

@VansFannel:あなたは何をmallocしていますか?配列は静的に割り当てられ、コードの実行が開始されると存在します。 – Praetorian

+0

@Vans静的配列には 'malloc()'はありません。それで、彼らも 'free()'を持っていないのです。 – chrisaycock

5

私はちょうど反対側の自由

でelementsPointerを解放する必要がありますか - あなたはそれがmalloc()またはcalloc()に割り当てられていないので、ない無料その特定のポインタ値なければなりません。

そのポインタが時々elementsPointerを使用してコードは、そのメモリを解放する責任がある場合(のみのメモリ・ブロックでfree()を呼び出すために動的にあなたが(フラグと多分)を配置する必要があります割り当てられた値が割り当てられる可能性がある場合)。

2

elementsPointerを解放しないでください。 elementsArrayはまだ存在します。実際には、静的に宣言された配列はfree()できません。

+0

明確にするために、静的ポインタに対して 'free()'の呼び出しを妨げるものは何もありません。コードはうまくコンパイルされます。呼び出しが実行されると、定義されていない動作になります。これは、フリー・オペレーション(ベスト・ケース)中のクラッシュ、後で起こるクラッシュ、またはサイレント・データ破損(最悪の場合)です。 – KeithB

関連する問題