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
Vaikuttaisi siltä, että osoittimen m1Ptr arvolla ei ole olemassa jäsenfunktiota begin(). Kuullostaako järkevältä? En ole kauheasti syventynyt iteraattoreiden toimintaan.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.