• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のStatic変数について)

C言語でStatic変数を使う際のメモリ解放方法とは?

このQ&Aのポイント
  • C言語において、Static変数を使う際にメモリ解放する方法はありますか?
  • Static変数は処理が終わった後でもメモリ上に残りますが、解放する方法はありますか?
  • C言語でStatic変数を使う場合、メモリ上に居座ることを避ける方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

ちょっとどんな状況を言っているのか、わかりにくいですが。 static変数にも、関数内で宣言したローカルなものと、関数外で宣言したものとで変数の有効範囲が違いますし。 static変数は、プログラムの一部、という感じにメモリが確保されているので、解放はできません。 無理矢理他の用途に使うこともできなくはないけど、そんな無茶はやめた方がいいです。 あとは、staticを使わずに、その2つの関数の引数として、「共通の変数」を受け取るようにするとか。 void func1(int *a) { ~ } void func2(int *a) { ~ } ... func1(&共通変数); func2(&共通変数); ... みたいに。

mitara42k
質問者

お礼

うーん。もうちょっと詳しく書くべきでしたね、すいません。 staticのメモリの解放はできないと言うことで諦めたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.3

ようするにこんな感じのことをやってます? static int aStaticValue; void f() { /* aStaticValue を操作する */ } void g() { /* aStaticValue を操作する */ } /* …(中略)… */ /* …(どこかの関数の中)… */ f(); g(); /* f(), g() のどちらもここ以外からは呼ばれない */ だとしたら、こうしてみてはいかがでしょうか。 void h() { int aValue; f1(&aValue); g1(&aValue); } void f1(int *aValue) { /* f()の aStaticValue への操作を *aValue に変えた内容 */ } void g1(int *aValue) { /* g()の aStaticValue への操作を *aValue に変えた内容 */ } /* …(中略)… */ /* …(どこかの関数の中)… */ h(); それとも、何らかの理由で上記でいうf(), g()の引数を変えることはできないのでしょうか? (実はf(), g()がイベントのコールバック関数なので引数が決まっているとか)

mitara42k
質問者

お礼

上の例であっていると思います。 問題は処理がループされ、再度関数が呼び出される時に値がリセットされてしまうことなのです。 というか、言ってて無理な気がしてきました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

>処理途中は何度も呼び出されるので値は保持しなければいけません であれば居座るしかないのでは?

mitara42k
質問者

お礼

どうもそのようです。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A