メモリエラーの種類
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/05 19:18 UTC 版)
様々な種類のメモリエラーが発生する可能性がある: アクセスエラー: ポインタの無効な読み取りと書き込みバッファオーバーフロー - 範囲外の書き込みは、隣接するオブジェクトの中身や内部データ (ヒープの管理領域など)、リターンアドレスを破壊する可能性がある。 バッファオーバーリード(英語版) - 範囲外の読み取りは、機密データを明らかにしたり、攻撃者がアドレス空間配置のランダム化を回避するのに役立つ。 競合状態 - 共有メモリへ同時に読み取りと書き込みを行う。 無効ページフォールト - 仮想アドレス空間で未定義のポインタへアクセスする。ヌルポインタの参照外しは、殆どの環境では例外又はプログラムの終了を引き起こすが、メモリ保護のない場合や、ヌルポインタの使用時に大きなオフセットや負のオフセットが含まれていた場合、カーネル又はシステムが破壊される可能性がある。 解放後使用 - 削除されたオブジェクトのアドレスを格納しているダングリングポインタ(英語版)の参照外し。 未初期化変数(英語版): 定義されていない変数を使用した場合、望ましくない値が代入されたり、一部の言語では破損した値が代入される場合があるヌルポインタの参照外し - 無効なポインタ又は割り当てられていないメモリへのポインタの参照外し。 ワイルドポインタ(英語版) - 何らかの既知の状態への初期化前にポインタが使用されると発生する。検出されないままになる可能性は低いが、ダングリングポインタと同じように不規則な動作をする。 メモリリーク: メモリ使用量が追跡されていない又は誤って追跡されている場合スタックの枯渇 - 一般的に、深すぎる再帰呼出しによってプログラムがスタック領域を使い果たした場合に発生する。通常、ガードページはプログラムを停止し、メモリが破壊されることを防ぐが、スタックフレームが大きな関数ではページをバイパスする場合がある。 ヒープの枯渇(英語版) - プログラムが利用可能なメモリよりも多くのメモリを確保しようとする。一部の言語では、確保後にこの状態を手動で確認する必要がある。 二重解放 - freeを繰り返し呼び出すと、同じアドレスにある新しいオブジェクトが早期解放される場合がある。正確なアドレスが再利用されていない場合、他の破壊が発生する可能性があり、特にFree list(英語版)を使用するアロケータでは可能性が高い。 無効な解放 - 無効なアドレスをfreeに渡すと、ヒープが破壊される可能性がある。 不一致な解放 - 複数のアロケータが使用されている場合、異なるアロケータの解放用の関数でメモリを解放しようとする。 不要なエイリアシング(英語版) - 無関係な目的のためにメモリロケーションが2回割り当て及び変更される場合。
※この「メモリエラーの種類」の解説は、「メモリ安全性」の解説の一部です。
「メモリエラーの種類」を含む「メモリ安全性」の記事については、「メモリ安全性」の概要を参照ください。
- メモリエラーの種類のページへのリンク