2011-11-21 136 views
-3

我有一个std::vector<int>启用卡。 我希望计算机选择一个随机:生成随机数组索引?

int r = 0; 
r = rand() % m_enabledCards.size(); 
cardCount.push_back(m_enabledCards[r]); 

出于某种原因,这个返回指数是出界和矢量有大约13元。

什么可能是错的?

感谢

+3

什么让你相信索引超出了界限? –

+2

“什么可能是错的?”你没有向我们展示的东西。尝试在valgrind下运行你的程序,并且使用m_enabledCards.at(r)让它抛出,如果它以某种方式得到一个超出边界的索引。 –

+1

这个代码片段没有错误。问题一定在其他地方。 – kol

回答

0

因为我看不出什么毛病,你发布的代码,误差应在其他地方,除非我忽略了一些东西。也许你的m_enabledCards载体实际上是空的?虽然这应该给模线的“除零”误差,但我想不出任何其他原因与给定的代码。

0

也许是因为类型冲突(size()返回unsigned int)。 尝试铸造size()为int或将其保存在一个int变量:

int my_size = m_enabledCards.size(); 
r = rand() % my_size; 

如果仍然无效,请尝试打印rand()值。

+0

size()可能返回一个size_t,而不是unsigned int。在32位系统上它们可能是相同的;在64位可能不会。 –

+0

@John,'size()'返回一个'size_type',这是一个无符号整数类型,根据:http://www.cplusplus.com/reference/stl/vector/size/ – juliomalegria

+0

当然,但这种类型是通常实际上是size_t,而不是“unsigned int”,正如你所说的('unsigned int'不同于“无符号整型”)。 –