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

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

  • if( fopen( path, fp, "wb" ) ) {

    このfopenって、ANSIのやつじゃないよね?
    引数が三つあるし、初期化されてもいないし、なんら実体を指していないfpを渡して、何か意味がある?
    この後、「ファイルの内容を読み込む」のに、"wb"ってのも謎だし。

    ANSI的には、

    FILE *fp;
    if( fp = fopen( path, "rb" ) ) {
      /* ファイルの内容を読み込む */
      fclose( fp );
    }

    って書く場面だよね。

    それに、これなら、fopenに失敗したときにfcloseすることはない。
    初等教科書にも、こーゆーコードが載ってるんじゃないかな?

    実用的なコードとしては、fopen できなかったときのエラー処理が無いのもおかしくね?

    FILE *fp;

    • あら、なんか色々書き間違えてましたw
      書いてくれたANSI準拠のコードが正解です。
      • openssl の方のこのコードでは、二重解放以前に、test を初期化せずに暗号処理に使用してしまいます。

        EVP_CIPHER_CTX *test;
        if( EVP_CIPHER_CTX_new ) {
                    /* 暗号処理 */
        }
        EVP_CIPHER_CTX_free( test );

        ちゃんと書くと、下の感じだと思いますが、手元の環境では test が NULL でもクラッシュしないですね。(Debian9, openssl 1.1.0)

        EVP_CIPHER_CTX *test;
        if( (test = EVP_CIPHER_CTX_new()) != NULL ) {
                    /* 暗号処理 */
        }
        EVP_CIPH

        --
        svn-init() {
          svnadmin create .svnrepo
          svn checkout file://$PWD/.svnrepo .
        }
        • すいません・・・なんか疲れているようですw

          ライブラリのバージョン的には同じ1.1系なんですが、クラッシュはしないけどSIGILLになりませんか?(GDB経由で実行すると出てくると思います)

          私のところもDebian系のディストリなのですが、上記のコードを実行するだけでは正常終了してしまいます。
          親コメント

アレゲは一日にしてならず -- アレゲ研究家

処理中...