Let’s say we start out with:
int *newArray = new int[1];
And then later have something like:
ifstream inputFile("File.txt");
Counter=0;
while (inputFile >> newValue)
{
newArray[Counter] = newValue;
Counter++
}
If I try to pull 100 lines from the text file, the program will eventually crash. However, if I had used
int *newArray = new int[100];
originally, it doesn’t crash.
If it’s dynamically allocating memory, why does it need an initial value more than 1? That makes no sense to me. Having to define any initial length beyond a small number such as 1 or 10 defeats the whole purpose of dynamic memory allocation…
EDIT: This is for school, we aren’t allowed to use vectors yet.
It’s not dynamic in the sense that it can dynamically resize itself. It’s dynamic in the sense that its size can be chosen dynamically at runtime, instead of compile time. One of the primary philosophies of C++ is that you don’t pay for what you don’t use. If dynamic arrays worked the way you are asking, that would require bounds checking, something I don’t need, so I don’t want to pay for it.
Anyway, the problem is solved with the standard library.
Isn’t that much nicer? You don’t even have to keep track of the size, because vector keeps track of it for you.
If you can’t use vector, then you’ve got a lot of work ahead of you. The principle is essentially this. You keep 2 additional integer variables. One to indicate the number of values you are using in your array, and one to indicate the current capacity of your array. When you run out of room, you allocate more space. For example, here is a poor man’s non-exception safe version of a vector: