CUDA streams destruction and CudaDeviceReset

I have implemented the following class using CUDA streams

class CudaStreams
{
    private:
        int             nStreams_;
        cudaStream_t*   streams_;
        cudaStream_t    active_stream_;

    public:

        // default constructor
        CudaStreams() { }

        // streams initialization
        void InitStreams(const int nStreams = 1) {
            nStreams_ = nStreams;
            // allocate and initialize an array of stream handles
            streams_ = (cudaStream_t*) malloc(nStreams_*sizeof(cudaStream_t));
            for(int j = 0; j < nStreams_; j++) CudaSafeCall(cudaStreamCreate(&(streams_[j]))); 

            active_stream_ = streams_[0];}

        // default destructor
        ~CudaStreams() {     
            for(int j = 0; j<nStreams_; j++) CudaSafeCall(cudaStreamDestroy(streams_[j])); }

}; 
If I now run this simple code

void main( int argc, char** argv) 
{
    streams.InitStreams(1);
    streams.~CudaStreams();

    cudaDeviceReset();
}

If I now run this simple code

void main( int argc, char** argv) 
{
    streams.InitStreams(1);
    streams.~CudaStreams();

    cudaDeviceReset();
}

after the cudaDeviceReset() call, I receive the following message:

Unhandled exception 0x772f15de in test.exe: 0x00000000.

What should I do before invoking the destructor to avoid this issue when using cudaDeviceReset()?

Some more information.

If I add free(streams_); in the destructor, namely

~CudaStreams() {     
    for(int i = 0; i<nStreams_; i++) CudaSafeCall(cudaStreamDestroy(streams_[i])); // * 
    free(streams_); }

I receive the following error message

cudaSafeCall() failed at C:\Users\Documents\Project\Library\CudaStreams.cuh:79 : unknown error

where line 79 is that denoted by * in the destructor.

Furthermore, If I use the same instructions of the constructor and the destructor directly inside the code, namely

void main( int argc, char** argv) 
{
    int nStreams_ = 3;
    cudaStream_t* streams_ = (cudaStream_t*) malloc(nStreams_*sizeof(cudaStream_t));
    for(int i = 0; i < nStreams_; i++) CudaSafeCall(cudaStreamCreate(&(streams_[i]))); 
    for(int i = 0; i<nStreams_; i++) CudaSafeCall(cudaStreamDestroy(streams_[i])); 
    free(streams_);

cudaDeviceReset();

everything works well. Perheps is something connected to a bad use of the class?

This problem has been solved at

http://stackoverflow.com/questions/16979982/cuda-streams-destruction-and-cudadevicereset/16982503?noredirect=1#16982503