[解決済み] C言語でNULLポインタを解放するのは良い習慣ですか?重複
2023-03-08 05:46:24
質問
重複の可能性があります。
ptr が NULL の場合の free(ptr) はメモリを破壊しますか?
私は、ポインタがNULLであった場合、それを解放するC関数を書いています。
malloc()
された場合にポインタを解放する C 関数を書いています。ポインタは NULL (エラーが発生し、コードが何も割り当てる機会を得られなかった場合) か、または
malloc()
. を使っても大丈夫なのでしょうか?
free(ptr);
の代わりに
if (ptr != NULL) free(ptr);
?
gcc
を使っても、全く文句を言いません。
-Wall -Wextra -ansi -pedantic
を使っても全く文句を言いませんが、これは良い習慣なのでしょうか?
どのように解決するのですか?
C 規格 7.20.3.2/2 から引用します。 ISO-IEC 9899 :
void free(void *ptr);
もし
ptr
が NULL ポインタの場合、何も起こりません。
をチェックしない
NULL
をチェックすることは、読むべきダミーコードを増やすだけであり、悪い習慣です。
しかし、あなたは
常に
をチェックします。
NULL
のポインタをチェックします。
malloc
を使用する場合、その場合
NULL
は何かがうまくいかなかったことを意味し、最も可能性が高いのはメモリが利用できなかったことです。
関連
-
解決済み] g++ コンパイルエラー: ')'トークンの前に一次式があることが予想される
-
initializer element is not constant "というエラーが表示されるのですが?
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] Xcode - 警告。C99 では関数の暗黙の宣言は無効です。
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
-
[解決済み】NULL終端文字列の根拠は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
error: '.' トークンの前にunqualified-idを指定する必要があります。
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
警告:代入がキャストなしで整数からポインタを作成する場合の修正方法に関する警告
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
-
[解決済み] ptr が NULL の場合の free(ptr) はメモリを破壊するか?