No.3ベストアンサー
- 回答日時:
プログラムを起動したとき、あらかじめ分かっているデータ(文字列定数等)や変数(グローバル変数や静的変数)用の場所としてメモリが確保されます。
この確保されたメモリをデータ領域といいますが、プログラムの実行中に増えたり減ったりはしません。プログラムの起動から終了まで常に一定量で、プログラム終了時に開放されます。
質問者さんが書かれたコードの"char1"と"char2"というデータ(文字列定数)はこのデータ領域に置かれます。
先述したようにデータ領域は常に一定量で確保も開放もできないのでそもそもリークという現象はないです。
メモリを動的に確保できる場所をヒープ領域といいますが、このヒープ領域で確保したメモリを開放し忘れるとリークという現象が起こります。
自動変数(関数の冒頭で宣言する普通の変数)は、スタック領域と呼ばれる場所に確保されます。関数が終了した時点で確保したメモリは自動的に開放されます。
スタック領域も大きさが決まっており、この大きさ以上のメモリを確保しようとすると、「スタックオーバフロー」というエラーが起きます。
この回答へのお礼
お礼日時:2010/01/01 16:42
詳しいご回答ありがとうございます。
ご指摘の通り、実行時にデータ領域が確保され、その領域が動的に変化しないので、
ヒープ領域に動的に確保でき、メモリを解放しないとリソースが減っていくメモリリークとは違いますね。
大変参考になりました。ありがとうございます。
No.4
- 回答日時:
メモリリークやメモリ確保、ポインタ等の理解が少し不足しているようですが、この式の場合、char* char_pのところで、char_pというアドレスに値を入れておく箱を用意しています。
その中に"char1"という値を格納しています。そのあと、そのchar_pのはこの中身を"char2"で上書きしているだけですので、使用メモリは増えていません。
メモリリーク、メモリ確保については他の方の説明やネットなどを調べてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語について コマンドラインで >変数 12.00 (char型) と、小数点付きの値を共用体に渡 1 2022/04/22 16:56
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
16進ダンプのプログラム
-
Accessで、メモリを開放するタ...
-
stringの最大サイズ
-
デストラクタを呼びたい
-
配列の添え字の最大数とは?
-
ヒープ領域の限界値設定
-
mallocで確保するメモリの領域...
-
DLLで同じメモリ領域を参照する...
-
free関数で動作が止まる
-
DLLのマルチスレッドの動作につ...
-
アセンブラでのメモリの動的確...
-
行列内の行の交換,列の交換を...
-
C++で、メンバもヒープに確保さ...
-
freeで開放される範囲
-
確保という言葉の使い方について
-
構造体でchar name[]と*nameの...
-
ビットをローテートするプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
mallocについて
-
配列の添え字の最大数とは?
-
ヒープメモリの解放について
-
ビットをローテートするプログ...
-
C++で、メンバもヒープに確保さ...
-
malloc呼び出し時のセグメンテ...
-
プログラムが途中で強制終了し...
-
スタック破壊の上手な見つけ方...
-
指定したメモリアドレスの値の...
-
void*型のデータサイズ
-
ポインタのポインタの初期化法
-
MSDNがgethostbynameではなくge...
-
callocの処理速度
-
free関数で動作が止まる
-
C++のnewで確保したメモリーの...
-
sprintf()の使い方について
-
Accessで、メモリを開放するタ...
おすすめ情報