C and C++ Binaries


ALLOC.DI : 二重初期化

要旨

同じ動的オブジェクトを、2回初期化しようとしています。

プロパティ

クラス名 Double Initialization
日本語クラス名 二重初期化
クラス分類 信頼性 (reliability)
ニーモニック ALLOC.DI
カテゴリー
CWE CWE:675 Multiple Operations on Resource in Single-Operation Context
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Double Initialization"

ワーニングを引き起こす関数

CodeSonar ships with library models that allow it to functions such as Win32 InitializeCriticalSection() that initialize a dynamic object. If one of these functions is called to initialize a dynamic object that is definitely already initialized by an earlier call, a warning will be issued.

If you have created a custom library model for some function f() in terms of one of these existing models, calls to f() will also be capable of triggering Double Initialization warnings.

#include <windows.h>

void double_init(void){
    CRITICAL_SECTION cs;
    /* ... */
    InitializeCriticalSection(&cs);
    DeleteCriticalSection(&cs);
    InitializeCriticalSection(&cs);  /* ok because of intervening DeleteCriticalSection() */
    InitializeCriticalSection(&cs);  /* warning issued here */
    DeleteCriticalSection(&cs);
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。