0

私は、フォームのいくつかのクラスの std::vector を持っています

class A{
 public:
 A():i(someNumber){}
 void useI() const{
   //do something with i
 }
 // No destructor defined
 private:
  int i;
};

私のコードは、各データ ポイントをループuseI()し、配列内の各要素を呼び出しています。数百回の反復の後、変数iが破損し、その理由がわかりません。状況は再現できます。ここには詳細があまりないことは承知していますが、何を確認すべきかについての提案は大歓迎です。

4

1 に答える 1

3

このようなことを引き起こす可能性が最も高いのは、正しい場所を指していないポインターへの配列アクセスのオーバーインデックスです。さて、これがどこで発生するかを見つけることは簡単ではありませんが、valgrind のようなツールが役に立ちます。

C スタイルの文字列を操作すると、適切に終了されていないか、保持バッファーのサイズが正しく適用されていない場合、文字列のオーバーインデックスが簡単に発生する可能性があります。

もう 1 つの原因は、メモリを破損するポインターの二重削除/解放である可能性があります

于 2012-06-14T16:46:21.077 に答える