witam. mam problem z przesyłaniem wskaźnika na tablice stringow do funkcji. caly program opiera sie na obsludze plikow. chce wpisac do tablicy strongiw po kolei kazde slowo z pliku binarnego.
moj kod jest podzielony na trzy pliki. w głownym w funkcji main mam
tekst tablica= czytaj(plik,ilosc);
gdzie tablica jest typu
typedef const string *tekst;
funkcja czytaj, według mnie powinna zwracać wskaźnik na tablicę do stringów więc moja funkcja czytaj wygląda tak
tekst czytaj(sciezka nazwa_pliku, int *ilosc){
(*ilosc)=zlicz_slowa(nazwa_pliku); //zmiana ilosc slow
ifstream plik;
plik.open(nazwa_pliku);
string slowo[*ilosc];
string *wsk;
wsk=slowo;
//wpisywanie w tablice
int a;
while(!plik.eof()){
plik>>wsk[a];
a++;
}
plik.close();
return wsk;
}
niestety przy wypisywaniu po kolei słów w main’ie dopisują się jakieś dziwne znaczki i cyfry, ale w funkcji czytaj mogę to normalnie wypisać także myślę że coś jest źle z przesyłaniem do funkcji. z góry dzięki za pomoc.
Gdy następuje wyjście z funkcji czytaj to jest zwalniana pamięć tablicy i stringów które są w niej, następnie ta pamięć jest przydzielana na coś innego i są tam wpisywane inne rzeczy. Spróbuj zmienić wsk=slowo; na wsk=new slowo[*ilosc]; i napisz czy to pomogło.
Tak jak napisał @KamilDz obiekt slowo znika gdy kończy się funkcja czytaj. Utworzenie slowa dynamicznie zadziała, ale trzeba będzie później samodzielnie zwalniać zajętą pamięć, bo po wielokrotnym wywołaniu czytaj pojawią się wycieki pamięci.
Zastanów się czy na prawdę potrzebujesz wskaźnika do stringa. String to mały obiekt przechowujący niewiele informacji statycznie. Jest w zasadzie kontenerem STL przechowujących dane w tablicy dynamicznej. W czasie kopiowania kopuje tylko kilka danych więc zwracanie stringa z funkcji nie jest specjalnie obciążające dla wydajności.
Poza tym po co ukrywać prawdziwy typ wskaźnika do string pod nową zmienną? Chcesz utrudnić czytanie kodu sobie i innym?