C and C++ Binaries


ALLOC.DI : Double Initialization

Summary

Two attempts to initialize the same dynamic object without an intervening deletion of the object.

Properties

Class Name Double Initialization
Significance reliability
Mnemonic ALLOC.DI
Categories
CWE CWE:675 Multiple Operations on Resource in Single-Operation Context
Availability Available for C and C++.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Double Initialization"

Triggering Functions

CodeSonar ships with library models that allow it to recognize 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.

Example

#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);
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.