Gå til innhold

Oppgave med pekere


Anbefalte innlegg

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
Videoannonse
Annonse
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...