• ベストアンサー

変数の宣言方法の相違によるエラー

ある変数を関数内で宣言した場合、デバック時に「ハンドルされていない例外が発生しました」っていうエラーになります。でも、グローバル変数として宣言した場合には、同じエラーが発生しませんでした。今回の場合、配列を10,000,000ぐらい確保しようとしたので、メモリ領域を確保できなかったが、エラーの発生原因だと思います。メンバ変数とグローバル変数で確保できるメモリ領域にどれくらいの違いがありますか。その他にクラスのメンバ変数として宣言した場合とグローバル変数として宣言した場合でどのような違いがありますか。 わかる方が教えてください。よろしくお願いします。

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

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 変数を関数内で宣言すると、変数はスタックと呼ばれる領域に獲得されます。 スタックに獲得可能なサイズは環境によって異なりますが、それ程大きな サイズを獲得する事はできません。 今回、関数内で宣言してエラーになったのは、スタック領域のオーバーフロー が原因の可能性が高いです。 スタックに取れる領域は数MB だと思いますが、グローバルであればメモリが 許せばGBまで行けると思います。

freeman
質問者

お礼

回答、ありがとうございます。 「関数内で宣言すると、スタックという領域に確保される。」ということがわかった。いい情報が得られました。エラーの原因がわかってよかったです。 大きな変数を使うときはグローバル変数として、定義しようと思います。 また、何かわからないことができたときはよろしくお願いします。

その他の回答 (1)

  • akino4
  • ベストアンサー率18% (35/185)
回答No.2

コンパイラの種類、OS等の環境がなんなのかがわからないとなんともいえませんが・・・ 通常非常に大きなメモリ空間を確保するときはmallocとかnewとか使った方が 無難ですよ。グローバルに確保するのは・・・マイコンではよくやりますね

freeman
質問者

お礼

回答、ありがとうございます。 mallocやnewを使うことで大きなメモリ空間を確保できるんですか。 今度、mallocを使ってプログラムを作成してみます。newを使うとdeleteで削除することで、有効にメモリを確保できると本に書いてありました。調べるきっかけを作ってくれてありがとうございます。 また、質問に回答してください。お願いします。