Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Iteraattori map pointteriin

Antex [28.11.2005 11:41:48]

#

Hieman epäselvä, mutta yritän selittää

eli olen tehnyt kolme map:ia mappi1, mappi2, mappi3
näiden sisällöt ohjataan poitterilla structiin tämä taas on vektorin sisällä.

typedef struct{
           mappi1* _mp1;
           mappi1* _mp2;
           mappi3* _mp3;
           int     Id;
           }mpData;

   std::vector< mpData > _dataVector;

kun yritän käyttää lukea map:ja saa virheen Access Violation

// luetaan mapit

   mappi1* m1Ptr;
   mappi2* m2Ptr;
   mappi3* m3Ptr;

   for (i = 0; i < _dataVector.size(); i++)
   {
      mpData = _dataVector[i];
      if (mpData.Id == mpId)
      {
         m1Ptr = mpData._mp1;
         m2Ptr = mpData._mp2;
         m3Ptr = mpData._mp3;
         break:
      }
   }

   mappi1::iterator iter = (*m1Ptr).begin(); // tämä rivi aiheuttaa virheen

   iter = (*m1Ptr).find(myData);

pointtereiden m1Ptr, m2Ptr, m3Ptr käyttäminen aiheuttaa tuon Access Violationin

Jaska [28.11.2005 18:56:57]

#

Vaikuttaisi siltä, että osoittimen m1Ptr arvolla ei ole olemassa jäsenfunktiota begin(). Kuullostaako järkevältä? En ole kauheasti syventynyt iteraattoreiden toimintaan.

Antex [28.11.2005 19:39:18]

#

Juu vika löytyi sijoitus funktiosta :|
mpData.Id sisään tallennettiin alustamaton int ja sitä verrattiin int arvoon joten tuo koodi toimii ja on oikein.

Virheilmoitus johtui siis siitä että m1Ptr ei osoittanut mihinkään.

Harmi että omasta koodista ei löydä "pikku" virheitä :o

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta