Widzę, że kolega przeszedł zbyt mocno językiem C.
dane = new double[sizeof(double)];
Jak się nie mylę to typ double ma długość 8 bajtów.
Właśnie zadeklarowałeś ośmioelementową tablicę double.
Zmienna size jest niezainicjowana.
if (dane==NULL){
throw bad_alloc();
}
To też jest bez sensu. W przypadku błędu alokacji operator new rzuca wyjątek bad_alloc, więc ten kod nie zostanie wykonany. Jeżeli chcesz użyć operatora new, który nie rzuca wyjątku musisz go użyć w następujący sposób
double* p = new (std::nothrow) double [rozmiar];
Podczas rozszerzania tablicy masz wyciek pamięci. Alokujesz nową tablicę, nie kopiujesz do niej elementów ze starej i nie zwalniasz pamięci starej tablicy.