クラシックメモリ操作の分析

  • ダングリングポインタを排除
  1. ポインタ変数の値は、それによってフィールドガイドを形成し、不正なメモリアドレスであります
  2. フィールドポインタはNULLポインタが使用できないメモリー・アドレス・ポインタを指していません
  3. 害、良い判断力、そして優れたデバッグのポインタNULL
  4. C言語が、アドレスが正当なポインタに格納されているかどうかを判断することができません
  • 野生のポインタの起源
  1. ローカルポインタ変数が 初期化されていない(初期化ポインタがNULLを定義する必要があります)
  2. 変数ポインタはポインタの前に破壊されます
  3. 使用すると、ポインタ(無料)がリリースされました
  4. 間違ってキャストしました
  • 基本原理
  1.  決して リターンアドレスのローカル変数と部分配列(関数は、スタックの動作の後にリリースされますので)
  2. 任意の変数を定義した後、0に初期化する必要があります
  3. 文字の配列は、文字列の終端になるために確認する必要があります後0
  4. メモリ動作に関連する任意の利用機能は、長さの情報を指定する必要があります
  • 一般的なメモリエラー
  1. 初期化されていないポインタ構造のメンバー:
  2. 構造体メンバポインタは、十分なメモリを割り当てません。
  3. メモリの割り当てに成功したが、初期化されていません
  4. メモリクロスボーダーの操作
  • トラフィックは、メモリ動作を支配します
  1. 動的メモリ割り当てた後、 あなたはNULLポインタがの使用を防ぐため、値がNULLであるかどうか、すぐにポインタをチェックする必要があります
  2. 無料NULLポインタ代入必見の直後
  3. メモリ操作の必要不可欠に関連するすべての操作 テープ長情報
  4. mallocとfreeの操作の操作がしなければならない 一致 自由であるべきのmalloc関数funcのFUNCで、メモリリークを防ぐため、メインであってはならないのmallocの主な機能には、多くの時間を解放するために、。
ボイドプリント(INT * P、int型のサイズ)
{ 
    intが私は= 0 チャー BUF [ 128 ] = { 0 }。
    snprintf(BUF、はsizeof(BUF)、" %sの"" Hello Worldの!" );
    以下のために(私は= 0 ; I <サイズ; I ++ 
    { 
        のprintf(" %D \ n " 、P [I])。
    } 
}
 
要約:
  1. 不正な値に保存されたアドレスからのエラーポインタのメモリの本質
  2. 初期化されていないポインタ変数、格納された乱数
  3. ポインタクロスボーダーの操作は、メモリの結果
  4. mallocとfreeからメモリリークが一致しません。
  5. ときよりmalloc関数の数よりも、空きメモリリークが発生
  6. mallocの自由よりも少ない場合には、プログラムがクラッシュすることがあります
 
 
 

おすすめ

転載: www.cnblogs.com/chengeputongren/p/12175726.html