I have a macro for calculating array sizes in my C code:
#define sizearray(a)  (sizeof(a) / sizeof((a)[0]))
When I test it, it works fine for statically defined arrays, but not so for dynamically defined arrays (see below). Not sure I understand why this is the case. Is there any way of calculating the size of an array allocated on the heap?
/* test sizearray macro */
void testSIZEARRAY(void)
{
    /* test case for statically defined array */
    int a[5] = {0,0,0,0,0};
    assert(sizearray(a) == 5);
    /* test case for dynamically defined array */
    int *b;
    b = calloc(5, sizeof(int));
    assert(sizearray(b) == 5);
    free(b);
}
 
     
     
     
    