Usuwanie tablicy wskaźników

0

Mam problem w usuwaniu , tak wyglądają moje plik :
class.h

 
#ifndef CLASS_H
#define  CLASS_H
#include < iostream>
#include <string > 


using namespace std;


class Pracownik
{
	// Pracownik
private:
	string Imie;
	string Nazwisko;
	int numer;
	int zarobek;
	int licznik = 0;
public:
	void menu(Pracownik **dane);
	int get_licznik(){ return licznik; };
	int get_licznik_z(){ licznik++; return licznik; };
	void  add_worker(Pracownik(**&dane), int ilosc);
	int get(int kwota, int liczba) { Zarobki zarobki; zarobek = zarobki.stawka(kwota,liczba); return  zarobki.stawka(kwota, liczba); }
	void search_worker();
	void reamove_worker(Pracownik **&dane,int ilosc);
	void print();
	string get_placuwka(){ Placowka placuwka; return placuwka.get_placowka(); }
	class Zarobki
	{
		//Zarobki 
	private:
		int  zarobki;
		double pensja;
		int  stawka_godzina;
		int godziny;
	public:
		int stawka(int kwota,int liczba)
		{ 
		   godziny = liczba;
		   stawka_godzina = kwota;
	       zarobki = stawka_godzina * godziny;
		   return zarobki; 
		};
	};
	Zarobki *temp;
	class Placowka
	{
		// Placowki firmy 
	private:
		string Miasto;
	public:
		string get_placowka(){ return Miasto; };
	};
	
};
//---------------------------------------------ALOKACJA PAMIECI---------------------------------------------


#endif

No i oczywiście class.cpp

 
#include < iostream>
#include <fstream>
#include "class.h"
#include "variables.h"

int n = 1;

using namespace std;

Pracownik *pracownik = new Pracownik;

void Pracownik::menu(Pracownik **dane)
{
	while (n != 0)
	{
		cout << "-- Witaj w bazie danych Pracownikow --" << endl;
		cout << " Co chcesz zrobic : " << endl;
		cout << " 1. Dodaj pracownika do bazy." << endl;
		cout << " 2. Usun pracownika z bazy." << endl;
		cout << " 3. Wyszukaj pracownika." << endl;
		cout << " 4. Wyswietl wszystkich pracownikow." << endl;
		cout << " 5. Usun wszystkich pracownikow." << endl;
		cout << " 6. Zapisz pracownikow do bazy." << endl;
		cout << " 0. Opusc program." << endl;
		cout << " Opcja : ";
		cin >> n;
		Pracownik Osoba;
		;
		//sprawdzanie opcji 
		switch (n)
		{
		case 1:
			//dodanie pracownika
			add_worker(dane, 0);

			break;
		case 2:
			// usniecie pracownika
			break;
		case 3:
			// wyszukaj pracownika
			break;
		case 4:
			// wyswietl pracownikow
			break;
		case 5:
			//usun wszystkich pracownikow
			reamove_worker(dane, 0);
			break;
		case 6:
			//Zapisz pracownikow do bazy
			break;
		case 0:
			//wyjscie z programu
			break;
		default:
			break;
		}
	}
}
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;
	
	dane = new Pracownik*[ilosc];
	// ---------------------------------WPROWADZANIE DANYCH DO TABLICY WSKAZNIKOW---------------------------------
	if (ilosc == 0)
	{
		for (int i = 0; i < ilosc+1; 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
	{
		dane = new Pracownik*[ilosc + 1];

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

		}
	}
	
}
void Pracownik::reamove_worker(Pracownik (**&dane), int ilosc)
{
	
		delete pracownik;
		for (int i = 0; i <= ilosc; i++)
		{
			delete dane[i];
		}
		delete[]dane;
	
}

Dodaję tylko jedną osobę .
Po usunięciu danych w pętli for wyskakuje coś takiego przy Imie i Nazwisko : error reading characters of string , a później gdy usuwał całą tablicę wyskakuje błąd :
[img]http://oi58.tinypic.com/f4p44p.jpg[/img]

1

Masz jakiś bubel projektowy.
Problem polega na tym że w reamove_worker tu delete pracownik; usuwasz tego super dyrektora (czy kimkolwiek jest ta zmienna globalna) to u ciebie jest.

0

Nie rozumiem o co ci chodzi dokładnie , mógłbyś to wytłumaczyć

1
void Pracownik::reamove_worker(Pracownik (**&dane), int ilosc)
{
        for (int i = 0; i <= ilosc; i++)
        {
            delete dane[i];
        }
        delete[]dane;

          //Po pierwsze na dole.
          //Po drugie - po co to w ogóle jest? Zakładam, że do testów?
        delete pracownik;
 
}

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