A tak na serio (:
Ode mnie takie podpowiedzi.
Nie wiem gdzie używasz tego
Pracownik *os= realloc(os,(j+1)*sizeof(Pracownik));
ale wydaję mi się, że gdzieś w funkcji tworzysz tymczasową zmienną i przypisujesz tam to co zwróci realloc. Nie przypisujesz tego do odpowiedniego wskaźnika czyli tego, którego tworzysz najpierw gdzieś w kodzie
Pracownik *os =(Pracownik*)malloc(sizeof(Pracownik));
Przez takie coś masz wycieki pamięci.
Ale tak jak mówiłem. Nie widziałem całego kodu i może to ma sens.
Nie mieszaj malloców, realloców itp z new i delete. Przez to będą Ci się wywalały programy. W ogóle nie mieszaj C z C++.
Tak jak wcześniej napisałem, nie używaj malloców w C++, ale jeżeli będziesz kiedyś pisał w C coś to takie rzutowanie jest niepotrzebne
Pracownik *os= (Pracownik*) realloc(os,(j+1)*sizeof(Pracownik));
wystarczy
Pracownik *os= realloc(os,(j+1)*sizeof(Pracownik));
Do operacji na napisach używaj std::string zamiast char*
A za ten pomysł Ci się kłaniam. Nawet jakbym chciał to bym tego tak nie wykminił ;)
imie=(char*) malloc(sizeof(char));
char a=NULL;
while(a!='\n')
{
scanf("%c",&a);
if(a!='\n')
{
imie[i]=a;
i++;
imie=(char*) realloc(imie, (i+1)*sizeof(char));
}
}