Ich habe ein Singleton, das ist ein Image-Manager. Wenn ich versuche, ein Bild zu laden, nenne ich Singleton auf diese Weise:Muss std :: map initialisiert werden?
utils::CImageBuff* img4 = utils::CImageManager::getInstance()->loadFromFile("uswg.png");
Und in Methode Loadfromfile, speichere ich das Bild in eine Karte:
m_imageMap[imageHashID].setHeight(ilGetInteger(IL_IMAGE_HEIGHT));
m_imageMap[imageHashID].setWitdh(ilGetInteger(IL_IMAGE_WIDTH));
m_imageMap[imageHashID].setBpp(ilGetInteger(IL_IMAGE_BPP));
....
Das Problem ist, dass ich eine bekommen Speicherzugriffsfehler Ist wie wenn m_imageMap NULL ist o falsch initialisiert, weil im ersten Satz excepttion geworfen wird. Aber wie gesagt, ist ein Singleton also muss die Map initialisiert werden. Ich entwickle in VC++ 2008. Es könnte eine falsche Kompilierung/.obj Datei sein?
Dies funktioniert gut gestern
Einige Ratschläge?
Edit: Die Erklärung von m_imageMap ist sehr einfach:
typedef std::map<unsigned int,utils::CImageBuff> t_imageMap;
Als zusätzliche Information, die Ausnahme in der Zeile 1643 der Datei output.c erzeugt wird.
Bearbeiten Nun, ich bin sehr enttäuscht mit diesem Fall. Ich habe den Code geändert, also ist die Klasse jetzt kein Singleton mehr. Jetzt ist nur m_imageMap statisch, um alle geladenen Bilder von jedem Ort aus sichtbar zu machen. Scheitert aber immer noch auf die gleiche Weise. Der Fehler ist eine Zugriffsverletzung. Außerdem, wenn ich den gesamten Methodencode um diesen Code ändere:
schlägt immer noch fehl. Es ist so, als wäre die Karte in irgendeiner Weise leer oder gesperrt oder sogar schlecht initialisiert, aber ich weiß es nicht. Kannst du mir helfen?
Wenn Sie etwas mehr Code benötigen, werde ich einfügen, aber mit diesen drei Zeilen abstürzt vereinfacht das Problem, denke ich.
Edit: Endlich gelöst Endlich habe ich von
geändertstd::map<unsigned int,utils::CImageBuff>
zu
std::map<unsigned int,utils::CImageBuff*>
Und jetzt funktioniert es. Jetzt muss ich einfach eine Methode zum Löschen des Inhalts einer statischen std :: map von Zeigern denken.
Vielen Dank an alle
Wie wird 'm_imageMap' deklariert? –
Bitte zeigen Sie die Definition von 'm_imageMap'. Beachten Sie, dass eine 'std :: map' nicht' NULL' sein kann; das macht keinen Sinn. –
Welcher Typ ist m_imageMap? Wie sieht der Rest der loadFromFile-Funktion aus? – SoapBox