- ベストアンサー
ポインタのアドレス範囲
ポインタに設定されるメモリアドレスの範囲は、 どのようにすれば知る事が出来るでしょうか? 関数への入力でポインタのアドレス範囲を超える ものがあれば検知したいのですが、見当がつきません…。 コンパイラはcygwinのgcc 3.4.4です。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「ポインタとして有効なアドレスの範囲」を知る一般的な方法は存在しません. ちなみに NULL ポインタは整定数 0 で表されますが, これは「0 番地」を意味するわけではありません. アドレスとして 0 番地が有効であったとしても, ポインタ変数に整定数 0 を代入するとそのポインタ変数の値は NULL ポインタと等しくなります.
その他の回答 (1)
- keibou21
- ベストアンサー率31% (18/58)
回答No.1
"ポインタのアドレス範囲"というのが何を指しているのかわかりませんが、 何かの型の配列の先頭アドレスを関数へ入力したと仮定すると >ポインタに設定されるメモリアドレスの範囲は、 >どのようにすれば知る事が出来るでしょうか? 出来ません。 配列要素数を引数として渡してあげてください。
質問者
お礼
ありがとうございます。 ポインタのアドレス範囲というのはよくよく考えると分かりにくい(変な)表現でした。 変数宣言時などにメモリを確保していますが、この確保するメモリアドレスのうち アドレスとして有効な範囲を知る事は出来るでしょうか? 例えば0(ゼロ)番のアドレスは存在しないので割り当てられないとか。
お礼
なるほど、一般的な方法は無かったんですね。 NULLポインタはよく理解していなかったようです、 それと0番地が有効な事もあるんですね。 この辺りの事はやっぱりCを勉強してるだけじゃ理解が出来ない というか想像が出来ないですね。 アセンブラをやるとわかるとは聞きますが。 ともかく、ありがとうございました。