To avoid the memory leak, simply delete the dynamic array in the loop after each use.
int main() { int sz; bool more = true; string ans; printDirections(); while( more ) { cout << "How many integers to generate and sort? "; cin >> sz; int *nums = new int[sz]; init(nums, sz); sort(nums, sz); print(nums, sz); delete [] nums; cout << "\nAgain? [y/n] "; cin >> ans; if (ans == "n") { more = false; } } return 0; }