2009-03-03 21 views
1

私はstd :: vector < :: const_iteratorを使用しようとしていますが、アクセス違反のクラッシュが発生します。それは、独自の内部First_Last_ポインタを使用すると、std :: vectorコードがクラッシュしているようです。これはおそらく既知のバグです。誰かが私に正しい回避策を教えてくれることを願っています。クラッシュする関数が外部ライブラリから呼び出されるのはおそらく適切でしょうか?VC++ 6.0のベクトルアクセス違反がクラッシュします。既知のバグ?

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

ThingList_.size()と呼ぶだけでもクラッシュします。

重要な場合は、これはsp6です。

+0

ThingList_をどこに割り当てますか? – jdigital

+0

たぶんダンブリーの質問ですが、ThingList_とは何ですか? – John

+0

ThingList_は、独自のコンストラクタに割り当てられます。それはベクトルです。それはAClassのプライベートメンバーとして生きています。 ThingList_は、イテレータ宣言で示されるオブジェクトポインタのベクトルです。 – kingkongrevenge

答えて

4

外部ライブラリの境界を越えてC++オブジェクトを渡す場合は、すべてのライブラリが同じランタイムライブラリ(特に同じヒープアロケータ)を使用していることを確認する必要があります。実際には、これは、すべてのライブラリをMSVCRTのDLLバージョンにリンクする必要があることを意味します。

+0

私たちは当日のベクトルと同じ問題を抱えていました。それらをDLLの境界を越えて渡すことは、同じCRTライブラリを使用していても頭痛を引き起こしました。私は彼らが後のリリースでこれを修正したと信じています。とにかく、何年も同じような問題はありませんでした。 – Joe

1

これはstd :: vectorではなく、あなたのコードのバグです。このコードは、あまりにも多くのプロジェクトでこのような簡単なバグ修正をするために使用されています。

ThnigList_変数が何らかの形で壊れている可能性があります。基本となる配列に直接アクセスしたり、変更したりしましたか?

+0

このSTLの実装には、ひどいバグがたくさんあります。忘れないでください、VC6は古代です。 ThingList_で動作するコントロールフローをもっと詳しく見ていきますが、これはかなり単純なプライベートメンバー変数です。私はすぐにそれにキャストやポインターが表示されません。 – kingkongrevenge

+0

@kingkongrevengeはい、バグがありますが、シンプルベクタを繰り返すことができないのは船舶の栓です – JaredPar

+0

私が見たバグの1つは、共有ライブラリ全体でstd :: mapを使うことができないということでした。私は船のストッパーだと思っていただろうが、明らかに彼らはそれをキャッチしませんでした。私はこれがバグだと思うし、それは私のプロジェクトがどのようにリンクされているかに関係している。 – kingkongrevenge

0

私はおそらくあなたのコードで 以下であることをJaredと同意します。あなたのstlライブラリが最新であることを確認する必要があります。

dinkumwareサイトには必要なパッチが適用されています。

安全のために更新する必要があります

+0

ベクトルが決してキャストされない場合、それ以外のものはそれを破壊する可能性がありますか?私がAClassとベクトルが決して正しくキャストされないことを二度チェックすると、私はアイデアがなくなります。そして、私は彼らがキャストされていないと確信しています。 – kingkongrevenge

+0

私は出演関係の腐敗について話していません。あなたの#ファイルが期限切れであり、更新が見つかる場所へのリンクを提供していることを指摘しています。 :) – EvilTeach

+0

あなたのコードを見ずに、私は推測を始めることができませんでした。 CおよびC++は、境界に関連する欠陥についてよく知られています。 – EvilTeach

関連する問題