Pergunta

Estou tentando usar um std :: vetor <> :: const_iterator e recebo um acidente de 'violação de acesso'. Parece que o código de vetor Std :: está travando quando usa seu próprio interno First_ e Last_ Ponteiros. Presumivelmente, este é um bug conhecido. Espero que alguém possa me apontar para a solução alternativa correta. Provavelmente é relevante que a função de travamento seja chamada de uma biblioteca externa?

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

Simplesmente chamando ThingList_.size() também falha.

Este é o SP6, se importa.

Foi útil?

Solução

Se você estiver passando por objetos C ++ através dos limites da biblioteca externa, deve garantir que todas as bibliotecas estejam usando a mesma biblioteca de tempo de execução (em particular, o mesmo alocador de heap). Na prática, isso significa que todas as bibliotecas devem estar vinculadas à versão DLL do MSVCRT.

Outras dicas

É quase certamente um bug no seu código e não em vetor de std ::. Esse código é usado por muitos projetos para ter um bug tão fácil de reproduzir.

O que provavelmente está acontecendo é que a variável thniglist_ foi corrompida de alguma forma. A matriz subjacente foi acessada diretamente e/ou modificada?

Concordo com Jared que provavelmente está em seu código, nunca, e você deve ter certeza de que suas libs STL estão atualizadas.

o Dinkumware O site possui os arquivos corrigidos que você precisa.

Você deve atualizar apenas para estar seguro

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top