構造体の不完全または部分的割り当てを許可する (-size-in-bytes)
メモリ バッファーが十分でないポインターが構造体を指すことを許可
説明
このオプションは Code Prover 解析のみに影響します。
検証において、構造体を指すけれども構造体の一部のフィールドに対してのみ十分なバッファーがあるポインターのデリファレンスを許可するように指定します。
このタイプのポインターは小さい構造体へのポインターがより大きな構造体のポインターにキャストされるときに生成されます。キャストによって生成されたポインターは、大きい方の構造体の一部のフィールドにのみ十分なバッファーをもちます。
オプションの設定
以下のいずれかの方法を使用してオプションを設定します。
Polyspace® ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成で [チェック動作] ノードを選択してから、このオプションを選択します。
Polyspace Platform ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成の [静的解析] タブで [実行時エラー] 、 [チェック動作] ノードを選択してから、このオプションを選択します。
コマンド ラインとオプション ファイル: オプション
-size-in-bytesを使用します。コマンド ライン情報を参照してください。
このオプションを使用する理由
このオプションを使用して、不適切にデリファレンスされたポインターのチェックを緩和します。構造体のすべてのフィールドに対して、ポインターに十分なバッファーが許可されていない場合でも、構造体をポイントすることができます。
設定
オンバッファー不足のポインターがデリファレンスされるとき、デリファレンスが許可されたバッファー範囲内で発生するかぎり、Polyspace は [不適切にデリファレンスされたポインター] エラーを生成しません。
たとえば、次のコードではポインター
pは構造体BIGの最初の 2 つのフィールドに対して十分なバッファーがあります。したがって、オプションがオンに設定されている場合、Polyspace は最初の 2 つのデリファレンスを有効であると見なします。3 番目のデリファレンスにより、pは許可されたバッファーの範囲外になります。したがって、Polyspace は 3 番目のデリファレンスに対して [不適切にデリファレンスされたポインター] エラーを生成します。#include <stdlib.h> typedef struct _little { int a; int b; } LITTLE; typedef struct _big { int a; int b; int c; } BIG; void main(void) { BIG *p = malloc(sizeof(LITTLE)); if (p!= ((void *) 0) ) { p->a = 0 ; p->b = 0 ; p->c = 0 ; // Red IDP check } }
オフ (既定の設定)構造体のすべてのフィールドに対して、ポインターに十分なバッファーがない場合、Polyspace はポインターの構造体へのデリファレンスを許可しません。最初にポインターをデリファレンスするときに、[不適切にデリファレンスされたポインター] エラーが発生します。
たとえば、次のコードでポインター
pが構造体BIGの最初の 2 つのフィールドに対して十分なバッファーがある場合でも、Polyspace はpのデリファレンスを無効であると見なします。#include <stdlib.h> typedef struct _little { int a; int b; } LITTLE; typedef struct _big { int a; int b; int c; } BIG; void main(void) { BIG *p = malloc(sizeof(LITTLE)); if (p!= ((void *) 0) ) { p->a = 0 ; // Red IDP check p->b = 0 ; p->c = 0 ; } }
ヒント
このオプションをオンに設定しない場合、部分的に割り当てされた構造体のフィールドにポインターを指すことはできません。
たとえば、前述の例でオプションをオンに設定せずに割り当てを実行すると、
Polyspace は割り当てを無効とみなします。int *ptr = &(p->a);
ptrをデリファレンスすると、[不適切にデリファレンスされたポインター] エラーが発生します。このオプションを使用すると、オレンジ チェックの数が若干増加する可能性があります。
コマンド ライン情報
パラメーター: -size-in-bytes |
| 既定値: オフ |
例 (Code Prover): polyspace-code-prover -sources |
例 (Code Prover Server): polyspace-code-prover-server -sources |