pthread_mutex_t
不透明なポインターのようです(追跡typedef
して調べることができます)。Splint では、ポインターはデフォルトで null 非許容です。null 許容ポインターが必要な場合は、セマンティック アノテーションを使用して宣言する必要があります/*@null@*/
。次に例を示します。
char * ptr1;
/*@null@*/ char * ptr2;
ptr1 = NULL; /* warning: implicitly not-nullable pointer */
ptr2 = NULL; /* OK: explicitly nullable pointer */
マニュアルによると、 null 状態に関して 3 つのオプションがあります。
null
NULL ポインターの可能性があります。
notnull
非 null ポインター。
relnull
ヌル チェックを緩和します。NULL が割り当てられている場合、または非 null ポインターとして使用されている場合はエラーになりません。
null 非許容ポインターを使用する利点は、ポインターを取得するたびにチェックする必要がないことです。たとえば、関数パラメーターに として注釈を付ける/*@notnull@*/
と、逆参照する前に確認する必要がなくなります。if(pointer == NULL)
これにより、チェックが減り、コードが簡素化されます。
これらの警告を無視することの危険性は、Splint に特定のポインターが null になる可能性がないことを伝え、後でそれに割り当てようとNULL
すると、この null ポインターが逆参照されてしまい、プログラムがクラッシュする可能性があることです。
私の意見では、あなたの実際の問題は Splint のポリシーであり、すべてのポインターが暗黙的に null 不可であると見なされます。これにより、 null ポインターの可能性があるすべてのポインターに注釈を付けることが強制されます。