Gå til innhold

Hvorfor får jeg "vector subscript out of range"?


Anbefalte innlegg

Hei!

 

Jeg har en funksjon:

http://pastebin.com/m7e200ae8

 

Dette er main:

int main()
{
vector<string> info;
getInfo(info, "14548");


cin.get();
return 0;
}

 

Poenget med denne koden, er at du skal kunne, ved hjelp av å bare vite et kundenummer, lete frem opplysninger om en person fra en tekstfil. Her er et eksempel på hvordan en tekstfil kan se ut:

 

(14548)(Arne Kristoffer)(Abcveien 2)
(34234)(Per)(Karl johans gate 4)
osv...

 

Du virkemåten til funksjonen, er at du passer en refferanse til en vector som argument til funksjonen, samt en tekststring (som skal være kundenummer), og outputtet blir lagt rett i vectoren. Jeg vet ikke om dette er en litt gammeldags måte å gjøre det på, i så fall får vi endre på det når jeg har fått dette til å virke.

 

Problemet:

Hvis jeg kaller getInfo(info, "14548"), så skjer akkurat det som skal skje. Jeg får en vector med fem elementer i, der tre er fylt. Men, hvis jeg kaller getInfo(info, "34234"), får jeg en assertion error: vector subscribt out of range.

 

Noen tips til hva jeg kan gjøre?

 

[Edit]Ehem... det heter ikke forfor..[/edit]

Endret av Arne
Lenke til kommentar
Videoannonse
Annonse

Orker ikke å lese kildekoden desverre, std::map er nok bedre egnet enn en vector til dette uansett.

 

Kan også lønne seg å lære seg å bruke en debugger eller ihvertfall skrive ut litt debuginfo med printf så du kommer litt nærmere hvor i koden den feiler enn bare en hel funksjon.

Lenke til kommentar
Orker ikke å lese kildekoden desverre, std::map er nok bedre egnet enn en vector til dette uansett.

 

Med mindre detter er en skole oppgave eller noe du lager for å lage noe for å lage noe som ikke skal brukes profesjonelt. Så støtter jeg teflonpanne fult ut med std::map, vector er ikke laget til det du bruker det til. std::map er laget for å søke gjennom og er optimalisert for det.

 

En debuger er også kjekt å kunne bruke.

Lenke til kommentar

Joda, jeg kan bruke en debugger helt grunnleggende! ;)

 

Takk for råd ang. maps, skal se på det i morgen.

 

Men jeg har funnet ut når det krasjer.

Her er koden:

		if (an == vec[0])
	{
		returnvector = vec;
		return;
	}

 

Her sjekker jeg om det første elementet i vectoren (kundenummeret) er likt med det kundenummeret vi har spesifisert (an). Hvis det samsvarer, skal vi returnere hele vectoren (vec), som inneholder informasjon om brukeren.

 

Jeg lager dette bare for å lære meg noe c++! :)

Lenke til kommentar

Fikk det til!

 

Det var en posisjonsvariabel jeg måtte nullstille etter hver gang jeg hadde kjørt gjennom en oppføring i vectoren! :)

 

Jeg bare lurer på en ting! Hva er det som er mest typisk C++? Å la metoder returnere verdier (1) eller å la metodene endre innholdet i andre variabler som en slags side-effekt, og ikke la metoden returnere noe (2)?

 

Eksempel (1):

//Deklarasjon av getInfo
void getInfo(vector<string> &returnvector, string an);

vector<std::string> info;
getInfo(info, "1234")
std::cout << info[0];
[/cout]
Her vil effekten endre innholdet i info, og man kan fra info få vite hva resultatet av dette ble. Verdien av info blir endret vha. en refferanse

Eksempel (2):
[code]
//Deklarasjon av getInfo
vector<string> getInfo(string an);

vector<std::string> info = getInfo("3423");
std::cout << info[0];

Her vil info endre verdi vha. returneringsverdi.

 

Så, hva er mest C++ og OOP-aktig?

 

Neste oppgaver blir å legge om til std::map og lage en funksjon hvor man kan legge brukere til i database-filen. ;)

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...