Resizing dynamic array in c++
arrays, c++
Solution
`A()` is not modifying `nums` to point at the new array. Even if it were, it is deleting the new array, so `nums` would end up pointing at invalid memory. You need to declare the `arr` parameter as a reference, and delete the old array instead of the new array:
void A(int** &arr)
{
int **resize;
resize = new int*[size*2];
for(int i = 0; i < size; i++)
resize[i] = new int(*arr[i]);
cout << endl;
delete[] arr;
arr = resize;
size *= 2;
}
For what you are attempting, I think you have too much indirection. Try removing a level:
#include <iostream>
using namespace std;
int *nums;
int size;
void A(int* &arr)
{
int *resize;
resize = new int[size*2];
for(int i = 0; i < size; i++)
resize[i] = arr[i];
cout << endl;
delete[] arr;
arr = resize;
size *= 2;
}
int main()
{
size = 10;
nums = new int[size];
for(int i = 0; i < size; i++)
nums[i] = i;
for(int i = 0; i < size; i++)
cout << nums[i] << endl;
A(nums);
cout << endl;
for(int i = (size / 2); i < size; i++)
nums[i] = i;
for(int i = 0; i < size; i++)
cout << nums[i] << endl;
delete[] nums;
}
Since you are using C++, you should be using a `std::vector` instead of a raw array, then you can eliminate `A()` altogether:
#include <iostream>
#include <vector>
using namespace std;
vector<int> nums;
int main()
{
nums.resize(10);
for(int i = 0; i < nums.size(); i++)
nums[i] = i;
for(int i = 0; i < nums.size(); i++)
cout << nums[i] << endl;
nums.resize(nums.size()*2);
cout << endl << endl;
for(int i = (nums.size() / 2); i < nums.size(); i++)
nums[i] = i;
for(int i = 0; i < nums.size(); i++)
cout << nums[i] << endl;
}
Problem
I have some code that is producing unexpected results. Here is the code: ``` #include <iostream> using namespace std; int **nums; int size; void A(int** arr) { int **resize; resize = new int*[size*2]; for(int i = 0; i < size; i++) resize[i] = new int(*arr[i]); cout << endl; arr = resize; size *= 2; delete[] resize; } int main() { size = 10; nums = new int*[size]; for(int i = 0; i < size; i++) nums[i] = new int(i); for(int i = 0; i < size; i++) cout << *nums[i] << endl; A(nums); cout << endl; for(int i = (size / 2); i < size; i++) nums[i] = new int(i); for(int i = 0; i < size; i++) cout << *nums[i] << endl; } ``` The function A(int** arr) works fine as far as I can tell and actually resizes the array. However, in the last for loop in main(), when the array is printing, the first two elements of the array are not 0 and 1 like it is supposed to be. Here is the result I am getting: ``` 0 1 2 3 4 5 6 7 8 9 16331248 16331712 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ``` Those first two ints after the space are different each time the program is executed. After some debugging I found out that the first two elements print correctly until the iterator i=13 in the second to last for loop in main(). Then the first two elements in the array take on some large numbers. I am not sure why this is happening and I have been working on this for a couple of hours now :( Any help is appreciated.