Dodawanie elementu do tablicy dynamicznej

0

Witajcie , mam problem gdyż próbuje dodać nowy element do tablicy dynamicznej tym samym zmieniając jej rozmiar, próbowałem na wiele sposobów ten, który wydaje mi się najbardziej poprawny również nie działa. Tym sposobem jest utworzenie pomocniczego podwójnego wskaźnika i przypisanie do niego elementów , które są już utworzone, usunięcie wcześniejszej tablicy i stworzenie jej jeszcze raz o zwiększoną wartość i dodanie tam tego elementu. Ale coś chyba robię źle proszę was o pomoc bo już 4 h siedzę nad tym i dalej jest ten sam efekt.
Tutaj mój kod :

 
void  Pracownik::add_worker(Pracownik **&dane,int ilosc)
{
	//zmienne pomocnicze
	int stawka;
	int liczba_godzin;
	//----------------------------------WCZYTYWANIE DANYCH O PRACOWNIKACH---------------------------------------
	cout << " Imie: ";
    cin >> pracownik->Imie;
	cout << endl << " Nazwisko: ";
	cin >> pracownik->Nazwisko;
	cout << endl << " Nr pracownika: ";
	cin >> pracownik->numer; 
	cout << endl << " Stawka za godzine: ";
	cin >> stawka;
	cout <<endl<< " Liczba godzin: ";
	cin >> liczba_godzin;
	if (ilosc == 1)
	{
		dane = new Pracownik *[ilosc];
		for (int i = 0; i < ilosc; i++)
		{
			dane[i] = new Pracownik;
			dane[i]->Imie = pracownik->Imie;
			dane[i]->Nazwisko = pracownik->Nazwisko;
			dane[i]->numer = pracownik->numer;
			dane[i]->zarobek = pracownik->get(stawka, liczba_godzin);
		}
	}
	else
	{
		Pracownik **pomoc;
		pomoc = new Pracownik *[ilosc];
		for (int i = 0; i < ilosc-1; i++)
		{
			pomoc[i] = dane[i];
		}
		for (int i = ilosc-1; i <ilosc; i++)
		{
			pomoc[i] = new Pracownik;
			pomoc[i]->Imie = pracownik->Imie;
			pomoc[i]->Nazwisko = pracownik->Nazwisko;
			pomoc[i]->numer = pracownik->numer;
			pomoc[i]->zarobek = pracownik->get(stawka, liczba_godzin);
		}
		for (int i = 0; i < ilosc-1; i++)
		{
			delete dane[i];
		}
		delete[] dane;
		dane = new Pracownik*[ilosc];
		for (int i = 0; i < ilosc; i++)
		{
			pomoc[i] = dane[i];
		}

		for (int i = 0; i < ilosc; i++)
		{
			delete pomoc[i];
		}
		delete[] pomoc;
	}
	licznik++;
}
0

Masz totalny bajzel projektowy.
Podziel to na dwie klasy: Pracownik oraz ListaPracownikow
Jeżeli chcesz rozszerzyć tablice wskaźników to nie musisz wielokrotnie przydzielać pamięć, wystarczy:

Pracownik **tmp = new Pracownik *[NewCount];
memcpy(dane,tmp,OldCount*sizeof(Pracownik*));
delete[] dane;
dane=tmp;
0

Wszystko zrozumiałem oprócz :

 
memcpy(dane,tmp,OldCount*sizeof(Pracownik*));

Zrobiłem tak jak mówiłeś :

Pracownik **pomoc;
		pomoc = new Pracownik *[ilosc];
		memcpy(dane, pomoc, (ilosc-1)*sizeof(Pracownik*));
		for (int i = ilosc-1; i <ilosc; i++)
		{
			pomoc[i] = new Pracownik;
			pomoc[i]->Imie = pracownik->Imie;
			pomoc[i]->Nazwisko = pracownik->Nazwisko;
			pomoc[i]->numer = pracownik->numer;
			pomoc[i]->zarobek = pracownik->get(stawka, liczba_godzin);
		}
		
		delete[] dane;
		dane = pomoc;
		for (int i = 0; i < ilosc; i++)
		{
			delete pomoc[i];
		}
		delete[] pomoc; 

Ale jest dalej to samo

0

wywal wszystko co masz po dane = pomoc;

1 użytkowników online, w tym zalogowanych: 0, gości: 1