メモリの再割り当て後に変更されたアライメント
メモリの再割り当てによるオブジェクトの元の厳密なアライメントの変更
説明
この欠陥は、realloc()
を使用して、厳格なメモリ アライメント要件のあるオブジェクトのサイズを変更した場合に発生します。
リスク
realloc()
によって返されるポインターは、アライメント要件があまり厳密ではないオブジェクトにうまく割り当てることができます。メモリ割り当てのミスアライメントは、バッファーのアンダーフローやオーバーフロー、不適切にデリファレンスされたポインター、または任意のメモリ位置へのアクセスにつながる可能性があります。ミスアライメントされたメモリをサポートしているプロセッサでは、割り当てがシステムのパフォーマンスに影響します。
修正方法
メモリを再割り当てするには、以下を行います。
メモリ ブロックをサイズ変更します。
Windows® では、
_aligned_realloc()
と、_aligned_malloc()
で元のメモリ ブロックを割り当てるために使用したアライメント引数を使用します。UNIX/Linux では、元のメモリ ブロックを割り当てるために使用したのと同じ関数と同じアライメント引数を使用します。
元のコンテンツを新しいメモリ ブロックにコピーします。
元のメモリ ブロックを解放します。
メモ
この修正には処理系定義の動作があります。処理系では要求されたメモリ アライメントをサポートしていない場合があり、新しいメモリ サイズに追加の制約がある可能性があります。
例
結果情報
グループ: 動的メモリ |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: ALIGNMENT_CHANGE
|
影響度: Low |
バージョン履歴
R2017b で導入