1. ホーム
  2. c

[解決済み] ポインタにメモリが割り当てられているかどうかのチェック

2023-06-13 03:47:09

質問

C言語で、関数に渡されたポインタがメモリで確保されているかどうかを確認することは可能ですか?

C言語で、文字ポインタを受け取る独自の関数を書きました。 buf [バッファへのポインタ]とサイズ buf_siz [バッファサイズ]。実際には、この関数を呼び出す前に、バッファを作成し、それに buf_siz のメモリを割り当てる必要があります。

ユーザーがメモリ割り当てを忘れて、単に私の関数にポインタを渡す可能性があるので、私はこれをチェックしたいです。そこで、渡されたポインタが本当にbuf_sizの量のメモリに割り当てられたかどうかを私の関数で確認する方法はありますか...?

EDIT1です。 それをチェックするための標準的なライブラリはないようです...しかし、それをチェックするために何か汚いハックはありますか...?

EDIT2です。 私は私の関数は、良いCプログラマによって使用されることを知っている... しかし、私は我々がチェックすることができるかどうかを知りたい...我々はできる場合、私はそれに聞いてみたい....

結論です。つまり、関数内で特定のポインタがメモリに割り当てられているかどうかを確認することは不可能である

どうすれば解決するのか?

実装上の工夫を除いて、確認することはできません。

ポインターは、それが指す場所以外の情報を持っていません。できることは、「このコンパイラのバージョンがどのようにメモリを割り当てるか知っているので、メモリの参照を解除し、ポインタを 4 バイト後ろに移動し、サイズをチェックし、それが一致することを確認する..." といったことだけです。メモリ確保は実装定義なので、標準的なやり方ではできない。言うまでもなく、動的割り当てをまったく行っていないかもしれません。

私が思いつく唯一の非解決策は、自分でメモリを割り当ててそれを返すことですが、これは小さな変更とは言い難いです。(それはより大きな設計変更です)。