There are couple of issues with your code,
- Even though array is expanded
size
is not updated
- All the elements are added to the index zero of the array
- In function
growArray
expanded array size has to be returned, no statements are executed after encountering of return
delete[]
has to be used inorder to release memory allocated using new[]
. refer
I tried to correct some part of your code,
#include <iostream>
int* growArray(int* pointer_values, int *size);
int* growArray(int* pointer_values, int* size)
{
int current_size = *size * 2;
//This dynamic array grows in size here.
int* pointer_new_values = new int[current_size];
for (int i = 0; i < *size; ++i)
{
pointer_new_values[i] = pointer_values[i];
}
delete[] pointer_values;
*size = current_size;
std::cout<< "grow "<<*size<<std::endl;
return pointer_new_values;
}
int main()
{
int next_element = 0;
int size = 1;
int* pointer_values = new int[size];
int values;
std::cout << "Please input a number:";
std::cin >> values;
while (values >= 0)
{
if (size == next_element + 1)
{
//Size is updated on expanding the array
pointer_values = growArray(pointer_values, &size);
}
pointer_values[next_element++] = values;
// ^^Here ,elements are added to new index
std::cout << "Please input another number or negative value for exit." << endl;
std::cin >> values;
}
for (int i = 0; i < next_element; ++i)
{
std::cout<< pointer_values[i] << " ";
}
}