I've been lately experimenting with dynamically allocated arrays. I got to conclusion that they have to store their own size in order to free the memory.
So I dug a little in memory with pointers and found that 64 bytes directly before and 14 bytes directly after array don't change upon recompilation (aren't random garbage).
I represented these as unsigned int types and printed them out in win console:
Here's what I got:
 (array's content is between fdfdfdfd uints in representation)
 (array's content is between fdfdfdfd uints in representation)
So I figured out that third unsigned int directly before the array's first element is the size of allocated memory in bytes.
However I cannot find any information about rest of them.
Q: Does anyone know what the memory surrounding array's content means and care to share?
The code used in program:
#include <iostream>
void show(unsigned long val[], int n)
{
    using namespace std;
    cout << "Array length: " << n <<endl;
    cout << "hex: ";
    for (int i = -6; i < n + 1; i++)
    {
        cout << hex << (*(val + i)) << "|";
    }
    cout << endl << "dec: ";
    for (int i = -6; i < n + 1; i++)
    {
        cout << dec << (*(val + i)) << "|";
    }
    cout << endl;
}
int main()
{
    using namespace std;
    unsigned long *a = new unsigned long[15]{ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
    unsigned long *b = new unsigned long[15]{ 0 };
    unsigned long *c = new unsigned long[17]{ 0 };
    show(a, 15);
    cout << endl;
    show(b, 15);
    cout << endl;
    show(c, 17);
    cout << endl;
    cout << endl;
    system("PAUSE");
    delete[] a;
    delete[] b;
    delete[] c;
}
 
     
     
    