第7章:メモリ管理

まず、メモリの割り当て

1、静的な地域分布:そのようなグローバル変数、静的変数として、プログラムのコンパイル時に既に割り当てられました

図2は、スタック上に割り当てられたローカル変数を関数内

図3に示すように、ヒープ割り当て(動的に割り当てられる)から:malloc関数によって、または新たなオープンスペース

 

第二に、一般的なメモリエラーと対策

1、メモリエラー----->ソリューション

  、メモリが正常に開かれたが、----->成功を開くかどうかを判断する場合(NULLは== P)または(NULL!= p)の場合に使用する必要があります使用されていません

  B、メモリが正常に開かれたが、彼が成功した初期値を開いたときに、メモリには----->使用して初期化

  C、また成功したメモリ割り当てを初期化しますが、国境を越えてメモリ動作させる(範囲外のメモリ):----->

  D、空きメモリを忘れて)メモリリーク:----->使用のmallocとfreeの周波数は新しい(同じものと同じ番号を使用するように削除する必要があります)

  E、メモリの解放は、(野生のポインタを)それを使用し続けて:----->ポインタがメモリを解放nullに設定された直後には、スタックメモリ空間上のリターンアドレスを開けません

要約:

図1に示すように、新たなアプリケーションとのmallocメモリと、直ちにポインタ値がNULLであるかどうかを確認する必要があり

図2は、初期配列と動的メモリを割り当てることを忘れないでください

3、配列インデックス又はポインタを回避するためには、範囲外であります

4、動的なアプリケーションは、メモリリークを防ぐため、メモリの解放と対にされなければなりません

無料で5、またはポインタをすぐにNULLに設定され、メモリのリリース後に削除

 

第三に、比較ポインタと配列

図1に示すように、文字列へのポインタをしながら:アレイは、任意の位置の内容を変更することができ、ポインタが、その空間点列であることができない、文字列の内容を変更することはできません

2、配列名は、(あなたはポインタに配列の内容をしたい場合、唯一のstrcpyで、比較が唯一のstrcmpを使用することができます)と比較して、直接コピーすることはできません

アレイが関数の引数として渡される場合、図3に示すように、アレイは自動的に残りが配列されている場合、ポインタの同じタイプに低減されます

 

第四に、メモリポインタのパラメータの受け渡し

ポインタがnullの場合、転送アドレス空間を指す引数ポインタ、その後、送信失敗、パラメータの変更は効果引数を持たないどんなにとして1、

図2に示すように、パラメータは、アドレスを受信するために使用できる2つのポインタ引数ポインタ(空間を指し、直接引数のポインタを変更することができます)

3、return文によって返されたメモリポインタを積み重ねないでください

 

五、無料および削除

ただ、ポインタが解放された空間でなく、宇宙へのポインタを指して置くポインタはダングリングポインタになった後、スペースが解放されます。

 

六、動的メモリの解放

1、ポインタが消えますが、ダイナミックオープンスペースとポインタの終焉の前にスペースを解放する---->放出しませんでした

2は、メモリが解放され、ポインタが死ぬか、nullに----->タイムリーなポインタNULLポインタになることを意味するものではありません

 

ダングリングポインタを防ぐために、七、

ワイルドポインタが発生します

  、初期化されていないポインタ変数

  時間内にポイントがNULLに設定されていない後にB、スペースが解放されます

  C、ポインタ操作は、変数のスコープを越え

 

八、mallocと新しいです

この部分は、私自身の要約(知識は本ではありません)です。

   (1)mallocとfreeは機能、新しく、演算子は削除します

   (2)malloc関数は、アプリケーションスペースを初期化していない、新しい初期化することができます

   (3)のmalloc宇宙用途、手動でスペースや転送を計算する必要は、新しいタイプはその後だけのスペースを維持する必要があります

   (4)malloc関数がvoid *の値を返すヒール新しいタイプのスペースであるため、転送は、それが新しい必要とせず、使用中に強くなければなりません

   malloc関数が失敗したとき(5)アプリケーションスペースを、リターンが空の場合、それは判断を使用する必要があり、NULLで、例外をキャッチするために新しいが、新しいニーズを必要としません。

   (6)リリースが出て呼ぶだろう前に、カスタムタイプのオブジェクトは、新しいスペースが完了しているオブジェクトを初期化するコンストラクタを適用するために呼び出される一方、malloc関数/スペースを開くことが唯一の自由、それは、コンストラクタ/デストラクタを呼び出すことはありませんが、スペースを削除して適用しますデストラクタ完全なクリーンアップスペースのリソース

   (7)新たな/比のmallocを削除/フリーわずかに低い効率は、新たなので/ /フリーボトムパッケージのmallocを削除します

1、新しい/削除、mallloc /自由をペアにする必要があります

2、新しいライブラリ関数malllocは、ライブラリ関数である、ではありません。

 

九、メモリ不足にどのようにしますか?

1は、この関数はreturn文によって直ちに終了された場合、ポインタは、NULLであるか否かを判断します

右の出口を使用して(1)全体の処理の動作を終了した場合2、ポインタがNULLであるかどうか判断されます

3は、新しい例外ハンドラのmallocのために提供されます

 

mallocを使用X.ポイント/無料

1、malloc関数の戻り値は、そうタイプの表示を切り替えることが、ボイド*です

2、malloc関数は唯一のスペースを開放するバイト数を気に

 

十一、new/delete的使用要点

1、new在创建动态对象的时候同时完成了初始化工作

2、如果用new创建数组,那么只能使用对象的无参构造函数

3、在使用delete释放对象数组时,留意不要丢弃了符号‘[]’

おすすめ

転載: www.cnblogs.com/lyf98/p/11750936.html