// @topic T00650 Dynamic memory allocation
// @brief new and delete[ ] demo code

int main(int argc, char* argv[])
{
    //----------------------------------------------------------------
    // Initialization
    //----------------------------------------------------------------
    int array_size = 100; // set initial size of the memory block

    //----------------------------------------------------------------
    // Allocate memory pointed by dynamic_memory
    //----------------------------------------------------------------
    int* dynamic_memory = new int[ array_size ]; // allocate memory
    int idx = 0;
    for ( ; idx < array_size; ++idx ) {
        // use allocated memory:
        // store sequence of numbers 0,1,2,...,99
        dynamic_memory[ idx ] = idx;
    }

    //----------------------------------------------------------------
    // Re-allocate memory (we need more!)
    //----------------------------------------------------------------
    array_size = array_size * 2; // double the size of the memory block
    int* temp_reallocate = new int[ array_size ]; // allocate more memory

    for ( idx = 0; idx < array_size / 2; ++idx ) {
        // move data from the old block to the new one:
        temp_reallocate[ idx ] = dynamic_memory[ idx ];
    }

    // Free old memory so that the memory becomes available
    // again for future requests of dynamic memory:
    delete[] dynamic_memory;

    dynamic_memory = temp_reallocate; // memory re-allocation complete!

    // Continue using dynamic memory...

    //----------------------------------------------------------------
    // Finally, de-allocate dynamic memory:
    //----------------------------------------------------------------
    delete[] dynamic_memory;
    return 0;
}