Avatar billede susrn Nybegynder
07. april 2003 - 12:17 Der er 7 kommentarer og
1 løsning

vector i vector i vector

jeg har brug for at gemme sammenhørende strings
det gør jeg i vector a.
jeg har brug for at gemme sammenhørende a typer, det gør jeg i vector b.
jeg har brug for at gemme sammenhørende b typer, det gør jeg i vector c.

men jeg får Accessviolation på sidste linie?

//fra .h fil
(a)  typedef  std::vector <AnsiString>  SprogDel;
(b)  typedef  std::vector <SprogDel>  EtSprog;
(c)  std::vector <EtSprog> *alleSprog;

//fra .cpp fil
  alleSprog = new std::vector <EtSprog>;
  EtSprog *etSprogTemp = new EtSprog;//std::vector <SprogDel>;
  alleSprog->push_back( *etSprogTemp );
Avatar billede olennert Nybegynder
07. april 2003 - 12:25 #1
Du mangler at allokere hukommelse til alleSprog:

alleSprog = new std::vector<EtSprog>;
Avatar billede olennert Nybegynder
07. april 2003 - 12:27 #2
I punkt (c) opretter du en pointer alleSprog til noget hukommelse, og sætter den til at pege et eller andet tilfældigt sted hen (idet du ikke eksplicit sætter den til at pege på en specifik adresse).

I sidste linie i .cpp filen laver du så alleSprog->push_back(*etSprogTemp), og så prøver koden at dereferere alleSprog til den tilfældige adresse den peger på. Og det er så noget hukommelse du ikke har adgang til (derfor AccessViolation).
Avatar billede olennert Nybegynder
07. april 2003 - 12:28 #3
Og så skal du huske at nedlægge hukommelsen igen senere, når du er færdig med at bruge alleSprog:

delete alleSprog;
Avatar billede arne_v Ekspert
07. april 2003 - 12:33 #4
Øh.

Hvad er forskellen på den første linie fra hendes .cpp fil og din linie:
alleSprog = new std::vector <EtSprog>;
alleSprog = new std::vector<EtSprog>;
?

Er mellemrummet signifikant ?
Avatar billede susrn Nybegynder
07. april 2003 - 12:39 #5
som arne siger, jeg har new'et til alleSprog.
andre gode forslag?
-eller ændringsforslag, jeg kunne jo også gå over i en array udgave
Avatar billede susrn Nybegynder
07. april 2003 - 13:20 #6
pinligt! Jeg havde glemt at allokere hukommelse, men til objektet af klassen der indeholder vectorerne. Tak for hjælpen.
Avatar billede jpk Nybegynder
07. april 2003 - 13:30 #7
Hvorfor definerer du egentlig ikke (c) på samme måde som a og b...
typedef std::vector <EtSprog> AlleSprog;
Så du kan "nøjes med":
AlleSprog* alleSprog;
og i din .cpp-fil
alleSprog = new AlleSprog;
Ikke at det er en løsning på dit problem, men du kan vel ligeså godt holde samme standard...
Avatar billede olennert Nybegynder
07. april 2003 - 13:40 #8
Ekstra pinligt for mig, når nu Arne udsatte mig for noget tilsvarende i sidste uge. Jeg *må* se at lære at læse spørgsmålet mere grundigt før jeg svarer. Undskyld.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester