int *ptr = new int[arraySize];
Это не будет то же самое ptr
, что и внешнее ptr
, поэтому оно будет вытекать, когда выйдет из области видимости. Должно быть
ptr = new int[arraySize];
Кроме того, не забудьте delete[] ptr
перед выходом из программы. Вот немного измененная версия, которую легче прочитать в i.m.o.
#include <iostream>
int main()
{
int number;
int arraySize = 3;
int *ptr = new int[arraySize] {0};
int i=0;
do
{
std::cout << "Input a number please: ";
std::cin >> number;
std::cin.ignore();
if(number==-1) break; // no need to increase array
if(i>=arraySize) {
// the array is full
int *tempPtr = new int[arraySize+1];
for (int x = 0; x < arraySize; ++x) tempPtr[x] = ptr[x];
delete[] ptr;
// just assign the address tempPtr is pointing at to ptr
ptr = tempPtr;
++arraySize;
}
// store the new number
ptr[i] = number;
++i;
} while(true);
for (int z = 0; z < i; z++)
{
std::cout << ptr[z] << std::endl;
}
delete[] ptr;
getchar();
return 0;
}
Обратите внимание, что существуют стандартные контейнеры (std :: vector и т. Д.), Которые более эффективно справляются с динамическим размещением, поэтому вам не нужно писать его самостоятельно.