0

非常感谢您的回答。

让我考虑检查向量内容的原因是,即使在我覆盖它之后,仍然存在相同的(奇怪的)值。我的目的是迭代生成一些随机变量并将它们放入二维向量中。我给你我的代码,也许我做错了什么:

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

在第一轮,一切顺利,但在第二轮,这是我在使用“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,您应该相信它是空的并且不应该检查单个元素。因此访问空向量的内容是非法的,并且可能导致内存访问错误。

您找到值的原因是因为实际的内存位置不会立即被覆盖——它们只会被标记为无效。在为其他对象分配相同的内存之前,数据可能会保持原样 - 但无法确定 - 实现留给编译器。

看起来您正在使用数组 operator[] 来访问元素。为了更安全,请使用迭代器或 .at() 方法来访问元素。这两种方法都执行边界检查,并且不会让您超出最后一个有效元素

于 2012-07-03T15:12:11.363 回答