This seems like it should have a super easy solution, but I just can’t figure it out. I am simply creating a resized array and trying to copy all the original values over, and then finally deleting the old array to free the memory.
void ResizeArray(int *orig, int size) {
int *resized = new int[size * 2];
for (int i = 0; i < size; i ++)
resized[i] = orig[i];
delete [] orig;
orig = resized;
}
What seems to be happening here is that resized[i] = orig[i] is copying values by reference rather than value, as printing orig after it gets resized returns a bunch of junk values unless I comment out delete [] orig. How can I make a deep copy from orig to resized, or is there some other problem that I am facing? I do not want to use std::vector.
Remember, parameters in C++ are passed by value. You are assigning
resizedto a copy of the pointer that was passed to you, the pointer outside the function remains the same.You should either use a double indirection (or a “double pointer”, i.e. a pointer to a pointer to
int):or a reference to the pointer:
By the way, for array sizes you should use the type
std::size_tfrom<cstddef>– it is guaranteed to hold the size for any object and makes clear that we are dealing with the size of an object.