0

回答ありがとうございます。

ベクトルの内容をチェックすることを考えさせる理由は、それを上書きした後でも、同じ(奇妙な)値が残るからです。私の目的は、いくつかの確率変数を繰り返し生成し、それらを2次元ベクトルに配置することです。私はあなたに私のコードを与えます、多分私は何か間違ったことをしています:

while (nbre_TTI_tempo != 0 ) 

{
   srand(time(NULL)) ;  

 while (nbre_UE_tempo != 0 )
{ 
  vect.clear() ; 

  nbre_PRB_tempo = nbre_PRB ; 

while (nbre_PRB_tempo != 0) 
 {  

 value = rand() % 15 + 1 ;  // generating random variables between 1 and 15

vect.push_back(value) ; 

  nbre_PRB_tempo -- ; 


   }



 All_CQI.push_back(vect) ; 

 nbre_UE_tempo -- ; 

}

// Do business 

All_CQI.clear();

} .// end while

最初のラウンドではすべてがうまくいきますが、2番目のラウンドでは、これは「clear」メソッドを使用した後のベクトルで見つけたものです。

158429184 14 15 158429264 10 9 158429440 5 1

そして、それを上書きしようとすると、次のようになります。158429184 14 15 158429264 10 9 158429440 5 1

これは、メソッド「push_back」を使用する前と同じ値です。私のコードで何か間違ったことをしていると思いますか?よろしくお願いします。

4

1 に答える 1

0

目的のために、empty()がtrueを返す場合、それが空であることを信頼する必要があり、個々の要素をチェックするべきではありません(SHOULDNOT)。したがって、空のベクトルの内容にアクセスすることは違法であり、メモリアクセスエラーを引き起こす可能性があります。

値を見つける理由は、実際のメモリ位置がすぐに上書きされないためです-それらは無効としてマークされるだけです。他のオブジェクトに同じメモリが割り当てられるまで、データはそのまま残る可能性がありますが、確実にする方法はありません。実装はコンパイラに任されています。

配列operator[]を使用して要素にアクセスしているようです。安全のために、イテレータまたは.at()メソッドを使用して要素にアクセスします。これらのメソッドは両方とも境界チェックを実行し、最後の有効な要素を超えることはできません

于 2012-07-03T15:12:11.363 に答える