Yes, because you're not deleting the memory allocated by new.
The correct way is:
void ArrayStorage::merge(int low, int mid, int high)
{
int start = low;
int marker = low;
int secondStart = mid + 1;
temp = new string [high + 1];
//rest of the code
delete[] temp; //free the memory
}
In C++, there's no automatic memory management for dynamically allocated objects. Everytime you call new or malloc(this method is usually for C), you allocate memory in dynamic storage, which you are responsible for freeing, via delete or free respectively. In your case, you allocate an array of size high + 1 which you need to free via delete[].
EDIT: As others have pointed out, maybe std::vector is better suited, but it depends on what you want to do. Look it up.
std::vector. Are you aware of it?