Frage

Ich versuche einen std :: vector zu verwenden <> :: const_iterator und ich bekomme einen Absturz von 'Zugriffsverletzung. Es sieht so aus, als würde der STD :: Vektorcode abstürzen, wenn er seinen eigenen Internal verwendet First_ und Last_ Zeiger. Vermutlich ist dies ein bekannter Fehler. Ich hoffe, jemand kann mich auf die richtige Problemumgehung verweisen. Es ist wahrscheinlich relevant, dass die Absturzfunktion aus einer externen Bibliothek aufgerufen wird?

const Thing const*  AClass::findThing (const std::string& label) const
{
    //ThingList_.begin() blows up at run time.  Compiles fine.
    for (std::vector<Thing*>::const_iterator it = ThingList_.begin(); it != ThingList_.end(); ++it) {
        //Irrelevant.
    }
    return 0;
}

Einfach anrufen ThingList_.size() stürzt auch ab.

Dies ist SP6, wenn es wichtig ist.

War es hilfreich?

Lösung

Wenn Sie C ++ - Objekte über externe Bibliotheksgrenzen über weitergeben, müssen Sie sicherstellen, dass alle Bibliotheken dieselbe Laufzeitbibliothek (insbesondere denselben Heap -Allocator) verwenden. In der Praxis bedeutet dies, dass alle Bibliotheken mit der DLL -Version von MSVCRT verknüpft werden müssen.

Andere Tipps

Es ist mit ziemlicher Sicherheit ein Fehler in Ihrem Code und nicht in STD :: Vector. Dieser Code wird von zu vielen Projekten verwendet, um einen so leicht zu repro -fehler zu haben.

Was wahrscheinlich passiert, ist, dass die Variable thhniglist_ in irgendeiner Weise beschädigt wurde. Wurde auf das zugrunde liegende Array direkt und/oder geändert?

Ich stimme Jared zu, dass es wahrscheinlich in Ihrem Code ist, desto weniger sollten Sie sicher sein, dass Ihre STL -Libs auf dem neuesten Stand sind.

Das Dinkumware Die Site enthält die gepatchteten Dateien, die Sie benötigen.

Sie sollten aktualisieren, nur um sicher zu sein

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top