• ベストアンサー

ポインタのアドレス範囲

ポインタに設定されるメモリアドレスの範囲は、 どのようにすれば知る事が出来るでしょうか? 関数への入力でポインタのアドレス範囲を超える ものがあれば検知したいのですが、見当がつきません…。 コンパイラはcygwinのgcc 3.4.4です。 宜しくお願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「ポインタとして有効なアドレスの範囲」を知る一般的な方法は存在しません. ちなみに NULL ポインタは整定数 0 で表されますが, これは「0 番地」を意味するわけではありません. アドレスとして 0 番地が有効であったとしても, ポインタ変数に整定数 0 を代入するとそのポインタ変数の値は NULL ポインタと等しくなります.

herbest
質問者

お礼

なるほど、一般的な方法は無かったんですね。 NULLポインタはよく理解していなかったようです、 それと0番地が有効な事もあるんですね。 この辺りの事はやっぱりCを勉強してるだけじゃ理解が出来ない というか想像が出来ないですね。 アセンブラをやるとわかるとは聞きますが。 ともかく、ありがとうございました。

その他の回答 (1)

  • keibou21
  • ベストアンサー率31% (18/58)
回答No.1

"ポインタのアドレス範囲"というのが何を指しているのかわかりませんが、 何かの型の配列の先頭アドレスを関数へ入力したと仮定すると >ポインタに設定されるメモリアドレスの範囲は、 >どのようにすれば知る事が出来るでしょうか? 出来ません。 配列要素数を引数として渡してあげてください。

herbest
質問者

お礼

ありがとうございます。 ポインタのアドレス範囲というのはよくよく考えると分かりにくい(変な)表現でした。 変数宣言時などにメモリを確保していますが、この確保するメモリアドレスのうち アドレスとして有効な範囲を知る事は出来るでしょうか? 例えば0(ゼロ)番のアドレスは存在しないので割り当てられないとか。

関連するQ&A

専門家に質問してみよう