これは動的なメモリ割り当てですか?
-
05-07-2019 - |
質問
簡単な質問: delete
または delete []
c
が必要ですか?言語は重要ですか?
char c[] = "hello"
解決
c ++では、動的メモリ割り当てではありません。 delete []
は必要ありません。
あなたの例は基本的にこれのショートカットです:
char c[6]={'h','e','l','l','o','\0'};
他のヒント
C ++のルールは、 new []
を使用するときは常に delete []
を使用し、を使用するときは常に
。例のように delete
を使用することです新しい new
を使用しない場合、 delete
は必要ありません。
例では、 c
配列の6バイトは、関数内で宣言された場合、ヒープではなくスタックに割り当てられます。これらのバイトはスタック上にあるため、宣言された関数が戻るとすぐに消えます。
その宣言が関数の外部にある場合、これらの6バイトはグローバルデータ領域に割り当てられ、プログラムの全ライフタイムの間、残ります。
ヒープに何かを置くときにメモリを動的に割り当てます。ここでは、変数をスタックに割り当てています。 new演算子またはmalloc呼び出しを使用していた場合、ヒープに変数を配置することになります。
delete(w / new)またはfree(w / malloc)を使用して、ヒープのメモリを解放する必要があります。関数/メソッドが戻ると、スタックは自動的に解放されます。
いいえ、配列はコンパイル時にサイズ変更されます。
所属していません StackOverflow