(перемещение / расширение по комментариям)
Поскольку вы выделяете новый массив каждый раз, не освобождая его, у вас огромная утечка памяти, то есть вы продолжаете запрашивать память в системе, даже не давая ееназад.В конце концов пространство в куче заканчивается, и при следующем выделении все, что вы получите, это исключение std::bad_alloc
.
Решение в стиле «С» будет заключаться в том, чтобы помнить об освобождении такой памяти, когда вам не нужноэто больше (с delete[]
), но это (1) подвержено ошибкам (например, если у вас есть несколько путей возврата внутри функции) и (2) потенциально небезопасно для исключения (каждая инструкция становится потенциальным путем возврата, если выесть исключения!).Таким образом, этого следует избегать.
Идиоматическое решение C ++ заключается в использовании либо интеллектуальных указателей - небольших объектов, которые инкапсулируют указатель и освобождают связанную память при их уничтожении, либо стандартных контейнеров, которые делают более или менее то же самое, но с семантикой копирования и некоторыми дополнительными функциями (включая сохранение размера массива внутри них).