1. ホーム
  2. c++

[解決済み] なぜポインターはデフォルトでNULLで初期化されないのですか?

2022-08-03 07:15:35

質問

なぜポインタは NULL ?

  void test(){
     char *buf;
     if (!buf)
        // whatever
  }

プログラムはifの中に入らないので buf が NULL ではないためです。

私はなぜ、どのような場合にゴミ箱を持つ変数、特にメモリ上のゴミ箱をアドレス指定するポインタが必要なのかを知りたいのですが。

どのように解決するのですか?

ポインタ(および他のPOD型)は初期化されるべきであると、私たちは皆認識しています。

そして問題は、「誰がそれらを初期化すべきか」ということになります。

さて、基本的には2つの方法があります。

  • コンパイラが初期化する。
  • 開発者が初期化します。

開発者が明示的に初期化しなかった変数については、コンパイラが初期化したと仮定してみましょう。そうすると、変数の初期化は簡単ではなく、開発者が宣言の時点でそれを行わなかった理由は、彼/彼女が何らかの操作を実行してから代入する必要があったという状況に遭遇します。

つまり、コンパイラが変数を NULL に初期化する命令をコードに追加し、その後開発者が正しい初期化を行うコードを追加するという状況が発生するのです。あるいは、他の条件下では、その変数が使われない可能性もあります。多くの C++ 開発者は、その余分な命令の代償として、両方の条件下で不平を言うでしょう。

それは時間だけの問題ではありません。しかし、空間についてもです。両方のリソースが割高で、開発者がどちらも手放したくないような環境はたくさんあります。

しかし : 強制的に初期化する効果をシミュレートすることができます。ほとんどのコンパイラは初期化されていない変数について警告を出します。だから、私はいつも警告レベルをできるだけ高くしている。そして、すべての警告をエラーとして扱うようにコンパイラーに指示します。この条件下では、ほとんどのコンパイラは、初期化されていないが使用されている変数に対してエラーを発生させ、その結果、コードが生成されないようにします。