a в этом случае - указатель, размер указателя зависит от компилятора.
Вы выполняете sizeof (int *).На самом деле вы используете 32-битный компилятор, а для вашего компилятора \ системные указатели 32-битные.
Вы не можете получить размер объекта, выделенного с новым из его указателя, sizeof оценивается во время компиляции, а невремя выполнения.
Чтобы получить размер массива, вы должны сделать ...
int a[5]; // Array allocated in stack, we can use sizeof.
std::cout << (sizeof(a) / sizeof(int));
sizeof возвращает размер в байтах, а не количество элементов в массиве.
Этот код эквивалентен записи
std::cout << (sizeof(int[5]) / sizeof(int));