Question

J'essaie d'utiliser un std :: vector < > :: const_iterator et j'obtiens un crash "violation d'accès". Il semble que le code std :: vector se bloque lorsqu'il utilise ses propres pointeurs internes First_ et Last_. Vraisemblablement, c'est un bug connu. J'espère que quelqu'un pourra m'indiquer la solution de contournement appropriée. Il est probablement pertinent que la fonction en panne soit appelée depuis une bibliothèque externe?

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;
}

Le simple fait d'appeler ThingList_.size() provoque également un blocage.

Ceci est sp6, si cela compte.

Était-ce utile?

La solution

Si vous transmettez des objets C ++ au-delà des limites d'une bibliothèque externe, vous devez vous assurer que toutes les bibliothèques utilisent la même bibliothèque d'exécution (en particulier, le même allocateur de segment de mémoire). En pratique, cela signifie que toutes les bibliothèques doivent être liées à la version DLL de MSVCRT.

Autres conseils

Il s’agit presque certainement d’un bogue dans votre code et non de std :: vector. Ce code est utilisé par trop de projets pour avoir un bogue aussi facile à reproduire.

Il est probable que la variable ThnigList_ a été corrompue d’une manière ou d’une autre. Le tableau sous-jacent a-t-il été accédé directement et / ou modifié?

Je suis d'accord avec Jared que c'est probablement dans votre code, Néanmoins, vous devez être sûr que vos bibliothèques stl sont à jour.

Le site dinkumware contient les fichiers corrigés dont vous avez besoin.

Vous devriez mettre à jour juste pour être sûr

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top