警告 C26115
関数 'func' のロック 'lock' を解放できない。
C/C++ プログラムでの構文スコープのロック acquire ロック リリース ペアの適用は、言語によって実行されません。 関数は、コンカレンシー状態を監視可能な方法で変更することにより、ロックの副作用が発生することがあります。 たとえば、ロックのラッパー関数により、特定のロックに関するロック取得数 (ロック数) が増えます。
_Acquires_lock_
を使用してロックの取得による副作用がある関数に注釈を付けたり、_Releases_lock_
を使用してロックの解放による副作用がある関数に注釈を付けたりできます。 このような注釈がない場合、返されたロック数が関数によって変更されないようにする必要があります。 取得とリリースのバランスが取れていない場合は、 と見なされます。 警告 C26115 は、関数に孤立したロックがあると発行されます。
例
次の例では、 _Acquires_lock_
で注釈が付いていない関数に孤立したロックがあるため、警告 C26115 が生成されます。
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
void FailToReleaseLock(int flag, DATA* p)
{
EnterCriticalSection(&p->cs);
if (flag)
return; // Warning C26115
LeaveCriticalSection(&p->cs);
}