LiengEn Skrevet 7. september 2008 Del Skrevet 7. september 2008 Hei! Sitter å funderer på en oppgave her. Jeg skal lage en funksjon, lesLinjer(string *s[], int ant), som leser inn antall linjer (ant). *s[] er tabell av pekere til strenger. Det jeg lurer på er, hva disse pekerene i tabellen skal peke på? Er vel ikke mulig å lage en lokal string tabell inne i funksjonen, da denne blir slettet når funksjonen er ferdig kjørt. Ville uansett ha gjort det slik, hvis det hadde vært snakk om en vanlig string tabell: void lesLinjer(string s[], int ant) { for (int i = 0; i < ant; i++) { string mid; getline(cin, mid); s[i] = mid; } } Lenke til kommentar
Dead_Rabbit Skrevet 7. september 2008 Del Skrevet 7. september 2008 (endret) Jeg vil tro at pekerne vil peke til stringer utenfor funksjon-scopet. Edit: Btw, det er ikke lurt å sette string-pekerene til å peke på mid-objektet, da dette vil bli destruert. En peker til uinitialisert minne er ikke noe stas. Endret 7. september 2008 av staalezh Lenke til kommentar
LiengEn Skrevet 10. september 2008 Forfatter Del Skrevet 10. september 2008 Jeg vil tro at pekerne vil peke til stringer utenfor funksjon-scopet. Edit: Btw, det er ikke lurt å sette string-pekerene til å peke på mid-objektet, da dette vil bli destruert. En peker til uinitialisert minne er ikke noe stas. Ja, jeg ser for meg to tabeller i main, en à string og en à * string. Hvis jeg tenker rett her, hvordan kan jeg, ved hjelp av pekertabellen, gi verdier til string tabellen? Lenke til kommentar
Dead_Rabbit Skrevet 10. september 2008 Del Skrevet 10. september 2008 Du kan gjøre det på to måter: int main(int argc, char* arvgv[]) { string** input = new string*[5]; for(int i = 0; i != 5; ++i) input[i] = new string; lesLinjer(input, 5); for(int i = 0; i != 5; ++i) delete input[i]; delete[] input; return 0; } Her allokerer vi først en tabell med 5 string*. Deretter itererer vi over tabellen og allokerer en string for hver peker i tabellen. Denne gir vi til lesLinjer, før vi gjør det motsatte; itererer over tabellen og deleter hver string* før vi deleter tabellen. En annen måte å gjøre det er som du sier å bruke to tabeller: int main(int argc, char* arvgv[]) { string input[5]; string* ptr[5]; for(int i = 0; i != 5; ++i) ptr[i] = &input[i]; lesLinjer(ptr, 5); return 0; } Dette er kanskje det enkleste, da du slipper alt styret med å allokere/deallokere minnet. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå