I know that I am supposed to use std::vector
or other alternatives, but there's something I don't understand with pointers.
When we create a pointer array:
int* a = new int[100];
It should allocate a space of 100 * sizeof(int)
, isn't it?
When we don't need it anymore, we do:
delete [] a;
1.
delete a;
But when I actually do this (once accidentally in a recreational program), no runtime error (unllike in part 3 below) seems to be triggered and the program runs normally (despite possible memory leaks). Why? And does it actually deleted (freed) the first element of the array?
2.
According to a question on StackOverflow, delete[]
knows the size of the array that it needs to delete.
But what happens when I delete the wrong thing? (It causes a runtime error... on codepad.org it shows memory clobbered before allocated block
and something Debug Assertion Failed
in VS2010.) Why don't it just delete (free) elements 1 to 99?
delete [] &a[1]; // or
delete [] (a + 1);
3.
The following code also shows memory clobbered before allocated block
. But why don't it just delete (free) the element 99? And why does it cause an error, but just delete a
like in part 1 doesn't?
delete &a[99]; //or
delete (a + 99);
Did C++ standards actually states what will happen for the above things?