アカウント名:
パスワード:
解放したら、そのポインタにNULLを入れてif (foo){ free(foo); foo = NULL;}
free(NULL);は何もしないことになってるので、if(foo)は無くてもよかったはず。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
普通のやつらの下を行け -- バッドノウハウ専門家
二重解放 (スコア:1)
最近は安全な文字列操作関数ライブラリ使ったり、コンパイル時に書式文字列と引数の不整合を指摘してくれるコンパイラ使うとか手段があるので、タレコミ後半の通りCそのものの問題ということでもないだろうけど。
CVEの脆弱性リスト眺めてると、二重解放の脆弱性が頻度も多い割りに中々気づけない気がする。何か良い対処方法はありますか?
Re: (スコア:0)
解放したら、そのポインタにNULLを入れて
if (foo){
free(foo);
foo = NULL;
}
Re: (スコア:1)
free(NULL);は何もしないことになってるので、if(foo)は無くてもよかったはず。
1を聞いて0を知れ!
Re: (スコア:1, 興味深い)
言語仕様しか知らない頭でっかちの屁理屈だって言われて。
たぶん昔、free(NULL)するとオカシナことになる処理系があったのでしょう。
Re: (スコア:0)
NULLチェックしてNULLだった場合の適切な処理は「何もしない」ではなく「エラーを出す」こと。
値がNULLのポインタをfree()すること自体は問題ないが、
そのような呼び出しフローになるようなプログラムには問題がある。
Re:二重解放 (スコア:0)