パスワードを忘れた? アカウント作成
この議論は、delta-keeper (31927)によって テキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。

ポインタ二重解放」記事へのコメント

  • > どっかのお兄さんがfclose()はどのルートでも実行すればいい

    あくまでfpがあるときは、漏れなくcloseしようですもんね。

    # Cのポインタは、1.解放漏れ、2.2重解放(解放時の変数のNULL初期化漏れとかその判定漏れ) 3.NULLでのアクセス/クローズ の3つはチェックできてないとまずいってところかなあ...

    --
    M-FalconSky (暑いか寒い)
    • その通りです。
      解放対象がNULLかどうか、コールされたAPI側で判定して欲しいです。。。
      • んー、それはどうだろう?
        クローズのときにNULLが渡されるのって、異常系が実装されていない正しくないロジックだから、と考えれば、異常終了するのが望ましい。
        …と考えることもできるんじゃないかと。

        どうしても、ってことなら、

        fclose(fp);

        fp && fclose(fp);

        と書けば済む話だしね。

        # Powershellのusing、なぜC#相当じゃないんだー!!

        • > クローズのときにNULLが渡される
          というと、free(NULL)とfclose(NULL)で差を設けている理由はなんでしょうかね・・・

          > fp && fclose(fp);
          この書き方おもしろいですねw
          ワンライナーで実行する・しないが選べるとは・・・
          • というと、free(NULL)とfclose(NULL)で差を設けている理由はなんでしょうかね・・・

            不明としか言いようがないですね。

            ただ、mallocに失敗して、NULLが返ってきて、そのエラー処理をしていなければ、freeするより前に異常終了しますよね。
            NULLチェックをしているなら、正常系にのみfreeを書けば済むし。

            この書き方おもしろいですねw

            Cだと割とよくある書き方だと思いますよ。
            こーゆーのを知らないと、例えば、

            if(func1() || func2()) {

            みたいなコードを書いたときに、func2が実行されない! みたいなことで悩むことになります。

            なので、中級の教科書には載ってると思います。

            • > if(func1() || func2()) {

              あんまり見ない書き方ですねw
              関数の戻り値評価は、おおよそ一関数実行の後にすぐやるので複数条件の並ぶ
              if文はそうそう出てこないです。
              また、gdbを使うことが多いので戻り値は一時変数に取ることが多いです。
              • あんまり見ない書き方ですねw

                見たことが無いのは、個人の経験なので仕方ないですね。
                # 職業プログラマなら、草生やしてる場合じゃないと思いますが。

                しかし、中級以上の教科書では必ず解説されているので、手元の教科書を読み返してみてください。
                もちろん、ぐぐってもいいです。いくらでも出てきます。

                関数の戻り値評価は

                関数でなくても、

                flag && --i > 0

                とかでも同じ問題が発生します。

              • > name = id || "Anonymous Coward";
                これは、C と Java では動かないです。

                --
                svn-init() {
                  svnadmin create .svnrepo
                  svn checkout file://$PWD/.svnrepo .
                }
              • by Ryo.F (3896) on 2017年12月11日 8時13分 (#3327387) 日記

                ああ、確かにそうですね。
                ご指摘ありがとうございます。

                親コメント

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

処理中...