You should initialize all your pointers to NULL and do something along the lines of:
if(Pointer)
{
delete(Pointer);
Pointer = NULL;
}
to avoid this issue.
You can also define safe delete / release functions like this:
#define SAFE_RELEASE( x ) {if(x){(x)->Release();(x)=NULL;}}
#define SAFE_DELETE( x ) {if(x){delete (x);(x)=NULL;}}
#define SAFE_DELETE_ARRAY( x ) {if(x){delete[] (x);(x)=NULL;}}but you will have to initialize all pointers to NULL first.