ポインターと整数間での変換は安全ではありません
ポインターと整数型間の変換によるミスアライメントまたは不適切な結果
説明
この欠陥は、intptr_t や uintprt_t などのポインター型と、enum、ptrdiff_t、pid_t などの整数型の間で変換が行われた場合に発生します。
リスク
ポインターと整数とのマッピングは、環境のアドレス指定構造と必ずしも一致するとは限りません。
ポインターから整数への変換により、以下が生じる可能性があります。
整数値の切り捨てまたは範囲外の整数値。
不適切な整数型。
整数からポインターへの変換により、以下が生じる可能性があります。
ポインターまたはオブジェクトのミスアライメント。
不適切なポインター アドレス。
修正方法
可能であれば、ポインターから整数への変換または整数からポインターへの変換を避けます。void ポインターを整数に変換する場合は、値が変化しないように、以下の型を使用します。
C99 —
intptr_tまたはuintptr_tC90 —
size_tまたはssize_t
例
結果情報
| グループ: プログラミング |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: BAD_INT_PTR_CAST |
| 影響度: Medium |
バージョン履歴
R2016b で導入