Reputation: 43
I have the following code:
int **arr = new int*[5];
for(int i = 0; i < 5; ++i)
arr[i] = new int[];
for(int i = 0; i < 5; ++i)
delete [] arr[i];
delete [] arr;
Now it compiles and runs successfully, however if I remove the array size '5' from the first line the code compiles but crashes with run-time error on the last line. I have the following questions that I have failed to find answers in Straustrup's C++ book, in the internet etc.
Upvotes: 4
Views: 689
Reputation: 75150
With the [5]
, you're getting an array of 5 int*
s.
If you remove the [5]
, you're saying you want a pointer to a pointer to an int
. So essentially, you have new int*[1]
.
Then you are indexing it with numbers from 0 to 4, which is out of bounds.
Upvotes: 3