絶対アドレスの使用
ポインターに絶対アドレスが割り当てられている
説明
このチェックは絶対アドレスがポインターに割り当てられているときに表示されます。
既定では、このチェックはグリーンになります。ソフトウェアでは、絶対アドレスについて次のように仮定します。
アドレスが有効である。
アドレスを代入するポインターの型によって、アドレスに格納される初期値が決まります。
アドレスを
int*
ポインターに代入する場合、そのアドレスが指すメモリ ゾーンはint
の値で初期化されます。値はデータ型int
で許容される任意の値になります。
解析は、絶対アドレスの使用に関する次の仮定に基づいて行われます。
アドレスで変数またはポインター演算が使用されている場合、チェックでは、そのアドレスに絶対アドレスとしてのフラグは設定されません。たとえば、アドレス
x = *(int*)0x7
は絶対アドレスと見なされます。アドレスx = *(int*)(0x7 + y)
は変数が使用されているため、絶対アドレスではありません。ポインターに絶対アドレスが割り当てられている場合、解析では、そのポインターが指すデータ型で許容される任意の値をその参照先に格納できると仮定されます。たとえば
ptr = (int*)0x32
の場合、解析では*ptr
に任意のint
を格納できると仮定されます。ptr = (int*)(char*)0x32
のような一連のキャストについては、一番外側のキャスト (この例ではint*
) のみが解析で考慮されます。
それぞれの絶対アドレスの使用について、このチェックを既定でオレンジにするには、コマンド ライン オプション-no-assumption-on-absolute-addresses
を使用します。
このチェックの診断
例
チェック情報
グループ: 静的メモリ |
言語: C | C++ |
頭字語: ABS_ADDR |