dynamically creates a pointer and then changes the address of the pointer to another while still deleting the original allocated space?
No. deletewill free the memory pointed to by its operands. You need deletethe same memory block that you received from new.
int c = 50;
int * q = new int;
int * r = q;
q = & c;
delete q;
delete r;
, delete , , , . r , q new, delete . q , , new, delete .
, q, , q :
int c = 50;
int * q = new int;
*q = c;
delete q;
, , q , q. q - , new, delete.