На данный вопрос уже ответили:
Выделив память так:
double* p = new double[b];
p не знает о количестве элементов под, которое выделена память. Но освободить всю выделенную память можно так:
delete[] p;
Как это работает?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей