This is not a bug, but _msize works this way by design as clearly explained in help.
I agree with you that the MS behaviour of _msize is preferable, so if you like I can move this in the feature requests thread.
//
// VStudio 2015 32 bit compiled run of the code below outputs
//
// 4
// 10256
// 2048
// Crash-hang!!!
//
// VStudio 2015 64 bit compiled run of the code below outputs
//
// 8
// 10256
// 2048
// Crash-hang!!!
//
// Pelles C 8 RC 7 32 bit compiled run of the code below outputs
//
// 4
// 10259
// 2048
// 0
//
// Pelles C 8 RC 7 64 bit compiled run of the code below outputs
//
// 8
// 10263
// 2048
// Crash-hang!!!
//
#include <stdio.h> // dos/linux
#include <string.h> // dos/linux
#include <stdlib.h> // dos/linux
#define cSizeOfDefaultString 2048
static char *Achar;
static int SizeofAchar;
static int msizeAchar;
static int SizeofA;
static int msizeA;
static char A[cSizeOfDefaultString];
int main(int argc, char *argv[])
{
Achar=(char*)calloc(256+10000 ,1);
SizeofAchar= sizeof( Achar);
printf("% d\n",(int)SizeofAchar);
msizeAchar=_msize( Achar);
printf("% d\n",(int)msizeAchar);
SizeofA= sizeof( A);
printf("% d\n",(int)SizeofA);
msizeA=_msize( A);
printf("% d\n",(int)msizeA);
return 0; /* End of main program */
}